VB程序VB代码:摄像头视频图像的监控、截图、录像(改进)

2019-04-14 23:46

VB程序VB代码:摄像头视频图像的监控、截图、

录像(改进)

本程序是“实现USB摄像头视频图像的监控、截图、录像”的改进。可实现对摄像头视频的监控、截图、录像,可以分别保存为图片文件和视频(压缩)文件。保存的视频文件可以用媒体播放机(Windows Media Player)、 暴风影音等软件进行播放,轻松实现家庭录像制作。

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

capCreateCaptureWindow 和 SendMessage。其中,capCreateCaptureWindow 的作用是创建一个视频窗口,摄像头捕捉到的视频图像在此窗口内显示,函数返回值就是代表此窗口的句柄。视频窗口创建后,剩下的事情就是用 SendMessage 向该窗口发送各种消息,实现对摄像头的控制。

本程序特点主要有:

1.实现对摄像头视频图像的监控、截图,视频录像并保存为磁盘文件。

2.可控制多个视频摄像头。例如,如果一台电脑配置了两个摄像头,启动本程序两次,单击按钮“源”,在弹出的“视频源”对话框中选择不同的捕获源,两个窗口就能同时显示不同摄像头获得的图像。如下图所示:

3.在“视频源”对话框中,还可以设置视频的亮度、对比度等许多参数:

4.录像时,如果采用默认的 AVI 文件格式,得到的视频文件会很大。单击按钮“压”,在弹出的“视频压缩”对话框中选择压缩方式“MPEG-4”,这样得到的视频文件会比默认方式小 10 倍以上。

5.本程序的视频窗口有自动大小和全屏功能。在全屏状态时,工具栏会自动隐藏。将鼠标移动到屏幕顶部,工具栏又会自动显示出来。

遗憾的是,由于水平有限,本程序无法判断是否使用了压缩记录方式,压缩后的文件其扩展名仍然是 AVI。当然,这并不影响播放,录像完成后也可以手动将扩展名修改为 mpg。其次,录像状态下改变视频窗口大小,有时会出现莫名其妙的错误。这个错误时有时无,毫无规律,因此本程序不得不关闭了录像状态下视频窗口自动大小的功能。

' '以下是窗体 Form1 的完整代码,在 VB6 和 WindowsXP 下调试通过: '在窗体放置4个控件:

' Command1:在属性窗口将 Index 属性设置为 0

' Check1: 在属性窗口将 Index 属性设置为 0,将 Style 属性设置为 1 ' Picture1:不必设置任何属性 ' Timer1: 不必设置任何属性

'程序调试时要注意:终止程序要用运行中的 Form1 窗口关闭。不要使用 VB 主窗口的菜单命令或 VB 工具栏上的关闭按钮,这样无法关闭打开的视频窗口,导致 VB 无响应。如果 VB 无响应,只有用系统任务管理器才能终止 VB 进程,调试过程中所做的修改将丢失。

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

http://hi.http://www.wodefanwen.com//100bd/blog/item/525292c3a37f210d0ff47724.html

Public ctCapWin As Long, ctRec As Boolean, ctDir As String, ctF As String, ctAutoSize As Boolean

Dim ctRefresh As Boolean, ctConnect As Boolean, ctAutoHide As Boolean, IsFillScreen As Boolean

Private Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long

Private Type PointAPI

X As Long: Y As Long End Type

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long

Const HWND_Top = 0 'hWndInsertAfter 参数:Z序列的顶部 Const HWND_TopMost = -1 '最前 Const HWND_NoTopMost = -2 '不在最前 Const HWND_Bottom = 1 '位于底层 Const SWP_NoSize = &H1 'wFlags 参数 Const SWP_NoMove = &H2 Const SWP_NoZorder = &H4 Const SWP_NoActivate = &H10 Const SWP_ShowWindow = &H40 Const SWP_HideWindow = &H80

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 SendMessageLong Lib "user32" Alias

"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

Private Declare Function PostMessage Lib "user32" Alias

"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const WM_Close = &H10

Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Integer, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Boolean

Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowW" (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

Const WS_Child = &H40000000

Const WS_Visible = &H10000000 Const WS_Caption = &HC00000 Const WS_ThickFrame = &H40000

Const GET_Frame = 1084

Const WM_User = &H400 '用户消息开始号,偏移地址:1024 Const WM_CAP_GET_CAPSTREAMPTR = WM_User + 1 '

Const WM_CAP_SET_CALLBACK_ERROR = WM_User + 2 '当出错回调函数

Const WM_CAP_SET_CALLBACK_STATUS = WM_User + 3 '当状态(status)改变的时回调函数

Const WM_CAP_SET_CALLBACK_YIELD = WM_User + 4 '在流捕获期间的回调函数 Const WM_CAP_SET_CALLBACK_FRAME = WM_User + 5 '帧预览回调函数

Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_User + 6 '在流捕获期间,当一个新的视频缓存区可用的时候就调用它

Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_User + 7 '在流捕获期间,当一个新的音频缓存区可用的时候就调用它

Const WM_CAP_GET_USER_DATA = WM_User + 8 '获取:数据关联到一个捕捉窗口 Const WM_CAP_SET_USER_DATA = WM_User + 9 '设置:数据关联到一个捕捉窗口

Const WM_CAP_DLG_VideoFormat = WM_User + 41 '对话框:视频格式

Const WM_CAP_DLG_VideoSource = WM_User + 42 '对话框:视频源,枚举视频源,控制颜色、对比度、饱和度的改变。需视频驱动程序支技

Const WM_CAP_DLG_VideoDisplay = WM_User + 43 '对话框:视频显示?控制视频捕捉过程中视频在显示器上的显示。对捕捉数据无影响,但会影响数了信号表达式

Const WM_CAP_DLG_VideoCompression = WM_User + 46 '对话框:视频压缩

Private Enum enWinSet ' en_Copy = -1 es_Show = 0 es_Hide es_Close es_Move


VB程序VB代码:摄像头视频图像的监控、截图、录像(改进).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:关于汽车销售的顾问实习工作心得体会

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: