Как сохранить картинку с веб-камеры

Я использую 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)

Другие вопросы по тегам