VB对摄像头控制代码解析(浅)

本人之前对VB调用摄像头的代码一直存在困惑,今天才稍微明白其中的一些作用。

VB在对摄像头进行控制时使用了sendmessage函数与capcreatcapturewindow这两个API函数。

前一个API函数存在于win32.dll动态链接库中,capcreatcapturewindow这个函数存在于avicap32.dll动态链接库中。

capcreatcreaturewindow函数在调用时需要采用消息传递机制。

代码中使用的各种消息例如wm_cap_start、wm_cap_Edit_copy 等,这些消息是系统能够自动识别的信息因此不需要程序进行解释。

为了增加程序的可读性,一些代码中对这些消息进行了赋值,赋值并不会对消息命令产生任何影响。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
VB6中使用摄像头,需要调用相应的API来实现。需要用到的API包括: 1. CreateWindowEx:创建应用程序窗口以及摄像头的子窗口。 2. capCreateCaptureWindow:创建摄像头窗口。 3. SendMessage:向摄像头窗口发送消息,包括控制命令和配置参数等。 4. DestroyWindow:销毁窗口。 以下是一个简单的示例代码,可以实现打开摄像头并进行图片捕获。 ``` Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public 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 Public Sub OpenCamera(ByVal Form1 As Form) Dim iDevice As Integer ' 设备序号 Dim hCap As Long Dim s As String iDevice = 0 ' 默认选择第一个设备 ' 打开摄像头 If iDevice > 0 Then s = Str(iDevice) & Chr$(0) Else s = Chr$(0) End If hCap = capCreateCaptureWindow("capture window", WS_CHILD Or WS_VISIBLE, 0, 0, 640, 480, Form1.hWnd, 0) SendMessage hCap, WM_CAP_DRIVER_CONNECT, iDevice, 0 SendMessage hCap, WM_CAP_SET_CALLBACK_FRAME, 0, 0 SendMessage hCap, WM_CAP_SET_PREVIEWRATE, 66, 0 SendMessage hCap, WM_CAP_SET_PREVIEW, True, 0 End Sub Private Sub Command1_Click() Dim sFilename As String sFilename = App.Path & "\test.bmp" Call SavePicture(SaveFrameImage(), sFilename) End Sub Private Function SaveFrameImage() As StdPicture Dim hMemCOS As Long ' 内存设备句柄 Dim hOldObj As Long ' 旧的Gdi对象 Dim hNewObj As Long ' 新的Gdi对象 Dim bmp As BitmapInfo Dim bmpExtra As Long hMemCOS = CreateCompatibleDC(0) bmp.bmiHeader.biSize = Len(bmp.bmiHeader) bmp.bmiHeader.biWidth = 640 bmp.bmiHeader.biHeight = 480 bmp.bmiHeader.biPlanes = 1 bmp.bmiHeader.biBitCount = 24 bmp.bmiHeader.biCompression = BI_RGB bmp.bmiHeader.biSizeImage = Width * 3 * Height hNewObj = CreateBitmap(Width, Height, 1, 24, ByVal 0&) hOldObj = SelectObject(hMemCOS, hNewObj) Call SendMessage(hWnd, WM_CAP_GRAB_FRAME, 0, 0) Call SendMessage(hWnd, WM_CAP_SAVEDIB, 0, ByVal VarPtr(bmp)) bmpExtra = Len(bmp.bmiHeader) SaveFrameImage = CreatePicture(Width, Height, PixelFormat24bppRGB, hMemCOS, bmpExtra) Call SelectObject(hMemCOS, hOldObj) Call DeleteObject(hNewObj) Call DeleteDC(hMemCOS) End Function ``` 以上代码仅作为参考,具体的应用可以酌情调整。当然,为了更好地展示视频流,还需对摄像头的参数进行更详尽的配置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值