在网上找了很久,终于有了一些眉目,算是可以入门了。以下内容和代码参考http://blog.youkuaiyun.com/suntaoznz/archive/2005/08/06/447067.aspx
在VB中捕获摄像头数据可以应用VFW(Microsoft Video for Windows )提供的函数:
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" _
Alias "capCreateCaptureWindowA" ( _
ByVal lpszWindowName As String, _
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 Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WM_USER = &H400
Private Const WM_CAP_START = &H400
Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)
Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)
Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)
Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)
Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)
Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Preview_Handle As Long
Private Sub Form_Load()
'建立捕获窗口
Preview_Handle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, 0, 0, 320, 240, Me.hwnd, 1)
'建立捕获窗口到捕获设备的连接
SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, 0, 0
'设置捕获的帧频率为30毫秒一帧
SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0
'用预览模式在捕获窗口开始预览图像
SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
'断开到捕获设备的连接
SendMessage Preview_Handle, WM_CAP_DRIVER_DISCONNECT, 0, 0
End Sub
程序中首先用capCreateCaptureWindow函数创建一个捕获窗口,之后,对捕获的所有操作都可以通过对这个捕获窗口发送消息进行控制。
开始捕获数据的步骤如下:
1.在开始捕获数据之前必须先发送WM_CAP_DRIVER_CONNECT消息让捕获窗口与指定捕获设备相连接。lParam参数0代表系统内安装的设备索引,索引从0开始。
2.发送WM_CAP_SET_PREVIEWRATE消息设置捕获的帧频率,wParam参数为多少秒捕获一帧。
3.发送WM_CAP_SET_PREVIEW消息以预览模式在捕获窗口开始预览图像 。
4.程序退出之前发送WM_CAP_DRIVER_DISCONNECT消息让捕获窗口与捕获设备断开连接。