vb vfw 视频捕捉 步骤

本文介绍使用AVICAP API进行摄像头编程的方法,包括调用函数创建预览窗口、连接驱动及配置摄像头参数等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Private Declare Function capGetDriverDescription Lib "avicap32.dll" Alias "capGetDriverDescriptionA" (ByVal wDriverIndex As Long, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Long

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 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 Const WS_CHILD = &H40000000

Private Const WS_THICKFRAME = &H40000

Private Const WS_VISIBLE = &H10000000

Private Const WS_CAPTION = &HC00000
 
Private Const WM_USER = &H400

Private Const WM_CAP_START = WM_USER
 
Private Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10

Private Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11

Private Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50

Private Const WM_CAP_SET_OVERLAY = WM_CAP_START + 51

Private Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52

Private Const WM_CAP_SET_SCALE = WM_CAP_START + 53
 
 
 
 lwnd 为摄像头句柄
 
1,获取所有驱动 capGetDriverDescription
 
2,创建窗口 capCreateCaptureWindow
 
3,连接驱动 SendMessage(lwnd,WM_CAP_DRIVER_CONNECT,0, 0)
 
4,设置是否自动适应 SendMessage(lwnd, WM_CAP_SET_SCALE,true,0)
 
5,设置速率 SendMessage(lwnd, WM_CAP_SET_PREVIEWRATE,66, 0)
 
6,开始预览 SendMessage(lwnd, WM_CAP_SET_PREVIEW,true, 0)
 
8,停止连接 SendMessage(lwnd,WM_CAP_DRIVER_DISCONNECT, 0, 0)
 
Dim hwndDlg As Long
Private Sub Command1_Click()
    '开始
    Dim strName As String * 100
    Dim strVersion As String * 100
    Dim j As Long
    Call capGetDriverDescription(0, strName, 100, strVersion, 100)
   
    hwndDlg = capCreateCaptureWindow(strName, WS_CHILD Or WS_THICKFRAME Or WS_VISIBLE, 0, 0, 320, 240, Picture1.hwnd, 0)
   
    j = SendMessage(hwndDlg, WM_CAP_DRIVER_CONNECT, 0, 0)
   
    Dim bTrue As Boolean
    bTrue = True
    j = SendMessage(hwndDlg, WM_CAP_SET_SCALE, bTrue, 0)
   
    j = SendMessage(hwndDlg, WM_CAP_SET_PREVIEWRATE, 60, 0)
   
    j = SendMessage(hwndDlg, WM_CAP_SET_PREVIEW, bTrue, 0)
   
  
End Sub
 
Private Sub Command2_Click()
    '停止
    If hwndDlg > 0 Then
      Dim j As Long
      j = SendMessage(hwndDlg, WM_CAP_DRIVER_DISCONNECT, 0, 0)
    End If
End Sub
 
Private Sub Command3_Click()
    '退出
End Sub
可用来在VB,VC中驱动摄像头,进行静帧捕捉的DLL动态链接库(必须要有摄像头生成StillCap0000.bmp):将MyDll文件解压后把MyDll.dll与MyDll.lib一起拷入工程DEBUG目录中(为保险起见DEBUG的外层目录也拷贝一份吧),另有一个VC++6的测试工程test_Dll,已经考入相应DLL和LIB文件,可直接编译运行,VB只拷贝MyDll.dll与MyDll.lib VB2008 调用方法,在公共模块中声名: Public Declare Function CreateWnd Lib "MyDll" () As Double Public Declare Function ClearGraphs Lib "MyDll" () As Double Public Declare Function OnpStillCapture Lib "MyDll" (ByVal hwnd As Long) As Double Public Declare Function InitStillGraph Lib "MyDll" (ByVal hwnd As Long) As Double Public Declare Function CloseWnd Lib "MyDll" () As Double 在窗体上放置2个PictureBox控件,名字为:pic1,pic2 放置三个按键:名字为Btn1,Btn2,Btn3 Btn1为打开视频,调用代码: Private Sub Btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn1.Click InitStillGraph(pic1.Handle) '打开摄像头预览视频 end sub Btn2为截取视频保存为BMP,文件保存在应用程序路径下,调用代码: Private Sub Btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn2.Click OnpStillCapture(pic2.Handle) '截取预览视频一帧图像 end sub Btn3为截取视频保存为清除内存,调用代码: Private Sub Btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn3.Click ClearGraphs() '退出前,完成内存清扫工 end sub VC调用方法: 在对话框上放置两个图像框,类型为位图,三个按键B1,B2,B3 定义全局函数引用: typedef HWND(* CreateWnd)(void);// typedef HRESULT(* InitStillGraph)(HWND hwnd); typedef void (* OnpStillCapture)(HWND hwnd); typedef int (* ClearGraphs)(); HINSTANCE glibsample; //如果定义成HANDLE类型,则出错 CreateWnd createwnd; InitStillGraph initStillGraph;//定义引用函数 OnpStillCapture onpStillCapture;//定义引用函数 ClearGraphs clearGraphs;//定义引用函数 用类向导为两个位图框建立控件(类型为Contorl)变量,m_p1,m_2 : 在窗口OnInitDialog()函数中调整图像框大小: // TODO: Add your specialized code here and/or call the base class m_p1.MoveWindow(0,0,200,200,true); m_p2.MoveWindow(210,0,200,200,true); glibsample=LoadLibrary("MyDll.dll"); //加载dll 在B1消息函数中: void 你的类::OnB1() { initStillGraph=(InitStillGraph)GetProcAddress(glibsample,"InitStillGraph"); (*initStillGraph)(m_p1.m_hWnd);//预览图像 } 在B2消息函数中: void 你的类::O
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值