2013-12-24 3 views
2

Я использую набор функциональных возможностей Windows Aaron Ballman для захвата видео с веб-камеры. Он отлично работает, но ... webcam.startpreview запускает изображения камеры, и веб-камера.stoppreview делает, как она говорит, и останавливает видео.Как сохранить фотографию с веб-камеры

Мой вопрос в том, что после stoppreview у меня остается неподвижное изображение в элементе управления холстом, и мне нужно знать, как сохранить это изображение на диск - желательно как файл jpg.

ответ

1

В этом случае элемент управления холста фактически не содержит изображения; он используется только для указания размеров и родительского элемента окна, управляемого системой, которое отображается непосредственно поверх холста.

Чтобы захватить текущий кадр, вам нужно будет захватить содержимое этого окна, управляемого системой.

например. добавить эту функцию в модуль 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 метод холста управления, чтобы скопировать изображение в 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) 

+0

Спасибо Amazed, но я боюсь, что это не сработает ... все, что я получаю, это белый прямоугольник. Я изменил последнюю строку, хотя: - saveto.SaveAsJPEG mypic. –

+0

Попробуйте сохранить холст перед вызовом 'StopPreview'. –

+0

Hi Amazed, Да, я пробовал это и попытался сохранить в разных плаценте различные графические объекты, такие как другой холст и так далее. Это определенно «DrawInto», который не работает, и я понятия не имею, почему. Я попытался изменить тип окна и все виды. Любые другие идеи? –

Смежные вопросы