Как получить доступ к веб-камере и сделать снимок - VB
Формулировка задачи:
Как получить доступ к веб камере (сделать снимок)? Может быть есть готовый контрол?
Решение задачи: «Как получить доступ к веб-камере и сделать снимок»
textual
Листинг программы
- Option Explicit
- Private Const WS_CHILD As Long = &H40000000
- Private Const WS_VISIBLE As Long = &H10000000
- Private Const CW_USEDEFAULT = &H80000000
- Private Const WM_CAP_START As Long = &H400
- Private Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP_START + 10
- Private Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP_START + 11
- Private Const WM_CAP_SET_PREVIEW As Long = WM_CAP_START + 50
- Private Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP_START + 52
- Private Const WM_CAP_SET_SCALE = WM_CAP_START + 53
- Private Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45
- Private Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44
- 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
- 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
- Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Any) As Long
- 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
- Dim hwndCap As Long
- Private Sub Form_Load()
- hwndCap = capCreateCaptureWindow(StrPtr("Take a Camera Shot"), WS_CHILD Or WS_VISIBLE, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, Me.hwnd, 0)
- If hwndCap = 0 Then End
- If SendMessage(hwndCap, WM_CAP_DRIVER_CONNECT, 0, ByVal 0&) = False Then End
- SendMessage hwndCap, WM_CAP_SET_PREVIEWRATE, 66, ByVal 0&
- SendMessage hwndCap, WM_CAP_SET_PREVIEW, 1, ByVal 0&
- SendMessage hwndCap, WM_CAP_SET_SCALE, 1, ByVal 0&
- If Not SetSize(1600, 1200) Then
- MsgBox "Не поддерживается"
- End If
- End Sub
- Private Function SetSize(ByVal w As Long, ByVal h As Long) As Boolean
- ' Задаем формат
- Dim buf() As Long
- Dim c As Long
- c = SendMessage(hwndCap, WM_CAP_GET_VIDEOFORMAT, 0, ByVal 0&)
- ReDim buf(c \ 4)
- buf(0) = 40 ' BITMAPINFO.biSize
- buf(1) = w ' BITMAPINFO.biWidth
- buf(2) = h ' BITMAPINFO.biHeight
- buf(3) = &H180001 ' BITMAPINFO.biPlanes = 1: BITMAPINFO.biBitCount = 24
- buf(4) = 0 ' BITMAPINFO.biCompression = 0 ' Без компрессии
- SetSize = SendMessage(hwndCap, WM_CAP_SET_VIDEOFORMAT, c, buf(0))
- End Function
- Private Sub Form_Resize()
- Dim RC(3) As Long
- GetClientRect Me.hwnd, RC(0)
- MoveWindow hwndCap, 0, 0, RC(2), RC(3), False
- End Sub
- Private Sub Form_Unload(Cancel As Integer)
- SendMessage hwndCap, WM_CAP_DRIVER_DISCONNECT, 0, ByVal 0&
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д