Как получить доступ к веб-камере и сделать снимок - VB

Узнай цену своей работы

Формулировка задачи:

Как получить доступ к веб камере (сделать снимок)? Может быть есть готовый контрол?

Решение задачи: «Как получить доступ к веб-камере и сделать снимок»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Const WS_CHILD As Long = &H40000000
  4. Private Const WS_VISIBLE As Long = &H10000000
  5. Private Const CW_USEDEFAULT = &H80000000
  6. Private Const WM_CAP_START As Long = &H400
  7. Private Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP_START + 10
  8. Private Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP_START + 11
  9. Private Const WM_CAP_SET_PREVIEW As Long = WM_CAP_START + 50
  10. Private Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP_START + 52
  11. Private Const WM_CAP_SET_SCALE = WM_CAP_START + 53
  12. Private Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45
  13. Private Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44
  14.  
  15. Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowW" (ByVal wn As Long, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
  16. Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
  17. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Any) As Long
  18. Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
  19.  
  20. Dim hwndCap As Long
  21.  
  22. Private Sub Form_Load()
  23.     hwndCap = capCreateCaptureWindow(StrPtr("Take a Camera Shot"), WS_CHILD Or WS_VISIBLE, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, Me.hwnd, 0)
  24.     If hwndCap = 0 Then End
  25.     If SendMessage(hwndCap, WM_CAP_DRIVER_CONNECT, 0, ByVal 0&) = False Then End
  26.     SendMessage hwndCap, WM_CAP_SET_PREVIEWRATE, 66, ByVal 0&
  27.     SendMessage hwndCap, WM_CAP_SET_PREVIEW, 1, ByVal 0&
  28.     SendMessage hwndCap, WM_CAP_SET_SCALE, 1, ByVal 0&
  29.     If Not SetSize(1600, 1200) Then
  30.         MsgBox "Не поддерживается"
  31.     End If
  32. End Sub
  33.  
  34. Private Function SetSize(ByVal w As Long, ByVal h As Long) As Boolean
  35.     ' Задаем формат
  36.    Dim buf()   As Long
  37.     Dim c       As Long
  38.     c = SendMessage(hwndCap, WM_CAP_GET_VIDEOFORMAT, 0, ByVal 0&)
  39.     ReDim buf(c \ 4)
  40.     buf(0) = 40         ' BITMAPINFO.biSize
  41.    buf(1) = w          ' BITMAPINFO.biWidth
  42.    buf(2) = h          ' BITMAPINFO.biHeight
  43.    buf(3) = &H180001   ' BITMAPINFO.biPlanes = 1: BITMAPINFO.biBitCount = 24
  44.    buf(4) = 0          ' BITMAPINFO.biCompression = 0 ' Без компрессии
  45.    SetSize = SendMessage(hwndCap, WM_CAP_SET_VIDEOFORMAT, c, buf(0))
  46. End Function
  47. Private Sub Form_Resize()
  48.     Dim RC(3) As Long
  49.     GetClientRect Me.hwnd, RC(0)
  50.     MoveWindow hwndCap, 0, 0, RC(2), RC(3), False
  51. End Sub
  52.  
  53. Private Sub Form_Unload(Cancel As Integer)
  54.     SendMessage hwndCap, WM_CAP_DRIVER_DISCONNECT, 0, ByVal 0&
  55. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы