Как сохранить картинку с веб-камеры
Я использую Windows Functionality Suite Аарона Баллмана для записи видео с моей веб-камеры. Он работает нормально, но... webcam.startpreview запускает отображение изображений с камеры, а webcam.stoppreview делает то, что говорит, и останавливает видео.
Мой вопрос заключается в том, что после остановки просмотра у меня остается неподвижное изображение в элементе управления canvas, и мне нужно знать, как сохранить это изображение на диск - предпочтительно в виде файла jpg.
1 ответ
В этом случае элемент управления Canvas не содержит изображения; он используется только для указания размеров и родительского элемента системно-управляемого окна, которое отображается непосредственно поверх Canvas.
Чтобы получить текущий кадр, вам нужно захватить содержимое этого управляемого системой окна.
например, добавьте эту функцию в модуль WebCamWFS:
Function CaptureFrame(SourceCanvas As Canvas) As Picture
Declare Function GetDC Lib "User32" (HWND As Integer) As Integer
Declare Function BitBlt Lib "GDI32" (DCdest As Integer, xDest As Integer, yDest As Integer, nWidth As Integer, _
nHeight As Integer, DCdource As Integer, xSource As Integer, ySource As Integer, rasterOp As Integer) As Boolean
Declare Function ReleaseDC Lib "User32" (HWND As Integer, DC As Integer) As Integer
Const SRCCOPY = &h00CC0020
Const CAPTUREBLT = &h40000000
Dim hDC, w, h As Integer
hDC = GetDC(mWnd)
w = SourceCanvas.Width
h = SourceCanvas.Height
x = SourceCanvas.Left + SourceCanvas.Window.Left
y = SourceCanvas.Top + SourceCanvas.Window.Top
Dim capture As New Picture(w, h, 24)
Call BitBlt(Capture.Graphics.Handle(1), 0, 0, w, h, hDC, 0, 0, SRCCOPY Or CAPTUREBLT)
Call ReleaseDC(mWnd, hDC)
Return capture
End Function
Используйте метод DrawInto элемента управления Canvas, чтобы скопировать изображение в Picture
объект, затем сохраните изображение в файл:
Dim mypic As New Picture(TargetCanvas.Width, TargetCanvas.Height, 32)
TargetCanvas.Drawinto(mypic.Graphics, 0, 0)
Dim saveto As FolderItem = GetSaveFolderItem("", "mypic.jpg")
mypic.Save(saveto, Picture.SaveAsJPEG)