admin管理员组

文章数量:1530842

2024年7月13日发(作者:)

53. capCreateCaptureWindow-摄像头视频监控

本程序仅用三个按钮实现摄像头视频控制。

利用电脑配备的 USB 摄像头进行视频监控,要用到两个 API 函数:

capCreateCaptureWindow 和 SendMessage。

capCreateCaptureWindow 的作用是创建一个视频窗口,摄像头捕捉到的视频图像

在此窗口内显示,函数返回值就是代表此窗口的句柄。此函数的 VB 声明:

Private Declare Function capCreateCaptureWindow Lib "" 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

Dim ctCapWin As Long

各参数意义如下:

lpszWindowName 视频窗口的窗口标题

dwStyle 窗口模式,设置值可用下面数值,也可组合使用:

WS_Child:视频窗口是子窗口,位于应用程序主窗口内。否则是独立的窗口

WS_Visible:视频窗口可见

WS_Caption:视频窗口有标题栏

WS_ThickFrame:视频窗口有边框

X 视频窗口位置x坐标

Y 视频窗口位置y坐标

nWidth 视频窗口宽度

nHeight 视频窗口高度

hwndParent 创建视频窗口的主窗口,设置为:

nID 视频ID

视频窗口创建后,剩下的事情就是用 SendMessage 向该窗口发送各种消息,实现对

摄像头的控制。其中最重要的是:

&H400 + 10 连接摄像头:WM_CAP_Connect

&H400 + 11 断开摄像头连接:WM_CAP_DisConnect

&H400 + 50 预览模式有效否:WM_CAP_SET_PreView

&H400 + 52 设置预览显示频率每秒帧数:WM_CAP_SET_PreViewRate

' '以下是完整代码,在 VB6 和 WindowsXP 下调试通过:

'在窗体放置3个控件:Command1、Command2、Command3

'为简化代码,程序中用到的常数没有在公共部分用 Const 声明,改在过程内声明或

直接使用。

'程序调试时要注意:终止程序要用运行中的 Form1 窗口关闭。不要使用 VB 主窗口

的菜单命令或 VB 工具栏上的关闭按钮,这样无法关闭打开的视频窗口,导致 VB 无响应。

如果 VB 无响应,只有用系统任务管理器才能终止 VB 进程,调试过程中所做的修改将丢

失。

'本人原创,转载请注明来源:

/100bd/blog/item/

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 Declare Function capCreateCaptureWindow Lib "" 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

Dim ctCapWin As Long

Private Sub Form_Load()

'设置按钮及位置,实际可以在控件设计期间完成

Dim H1 As Long

n = "摄像头控制": n = "连接摄像头"

n = "断开摄像头": n = "关闭视频窗口"

H1 = ight("A")

H1 * 0.5, H1 * 0.5, H1 * 7, H1 * 2

H1 * 8, H1 * 0.5, H1 * 7, H1 * 2

H1 * 16, H1 * 0.5, H1 * 7, H1 * 2

End Sub

Private Sub Command1_Click()

'创建视频窗口和连接摄像头

Const WS_Child = &H40000000: Const WS_Visible = &H10000000

Const WS_Caption = &HC00000: Const WS_ThickFrame = &H40000

Dim nStyle As Long, T As Long

'创建一个视频窗口,大小:640*480

If ctCapWin = 0 Then

T = ( + * 1.1, ode,

3) '视频窗口垂直位置:像素

nStyle = WS_Child + WS_Visible + WS_Caption + WS_ThickFrame '子窗口(在

Form1内)+可见+标题栏+边框

'nStyle = WS_Child + WS_Visible '视频窗口无标题栏和边框

'nStyle = WS_Visible '视频窗口为独立窗口,关闭主窗口视频窗口也会自动关闭

ctCapWin = capCreateCaptureWindow("我创建的视频窗口", nStyle, 0, T, 640,

480, , 0)

End If

'将视频窗口连接到摄像头,如无后面两条语句视频窗口画面不会变化

SendMessage ctCapWin, &H400 + 10, 0, 0 '连接摄像头

SendMessage ctCapWin, &H400 + 50, 1, 0 '第三个参数:1-预览模式有效,0-预览

模式无效

SendMessage ctCapWin, &H400 + 52, 30, 0 '第三个参数:设置预览显示频率为每

秒 30 帧

End Sub

Private Sub Command2_Click()

SendMessage ctCapWin, &H400 + 11, 0, 0 '断开摄像头连接

End Sub

Private Sub Command3_Click()

Const WM_Close = &H10

SendMessage ctCapWin, WM_Close, 0, 0 '关闭视频窗口

ctCapWin = 0 '将视频窗口句柄设为 0

End Sub

本文标签: 视频摄像头关闭设置终止