VB程序VB代码摄像头视频图像的监控截图录像改进.docx
- 文档编号:1689384
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:15
- 大小:103.37KB
VB程序VB代码摄像头视频图像的监控截图录像改进.docx
《VB程序VB代码摄像头视频图像的监控截图录像改进.docx》由会员分享,可在线阅读,更多相关《VB程序VB代码摄像头视频图像的监控截图录像改进.docx(15页珍藏版)》请在冰点文库上搜索。
VB程序VB代码摄像头视频图像的监控截图录像改进
VB程序VB代码:
摄像头视频图像的监控、截图、录像(改进)
本程序是“实现USB摄像头视频图像的监控、截图、录像”的改进。
可实现对摄像头视频的监控、截图、录像,可以分别保存为图片文件和视频(压缩)文件。
保存的视频文件可以用媒体播放机(WindowsMediaPlayer)、暴风影音等软件进行播放,轻松实现家庭录像制作。
利用电脑配备的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进程,调试过程中所做的修改将丢失。
'本人原创,转载请注明来源:
PublicctCapWinAsLong,ctRecAsBoolean,ctDirAsString,ctFAsString,ctAutoSizeAsBoolean
DimctRefreshAsBoolean,ctConnectAsBoolean,ctAutoHideAsBoolean,IsFillScreenAsBoolean
PrivateDeclareFunctionGetCursorPosLib"user32"(lpPointAsPointAPI)AsLong
PrivateTypePointAPI
XAsLong:
YAsLong
EndType
PrivateDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValXAsLong,ByValYAsLong,ByValcXAsLong,ByValcYAsLong,ByValwFlagsAsLong)AsLong
ConstHWND_Top=0 'hWndInsertAfter参数:
Z序列的顶部
ConstHWND_TopMost=-1 '最前
ConstHWND_NoTopMost=-2 '不在最前
ConstHWND_Bottom=1 '位于底层
ConstSWP_NoSize=&H1 'wFlags参数
ConstSWP_NoMove=&H2
ConstSWP_NoZorder=&H4
ConstSWP_NoActivate=&H10
ConstSWP_ShowWindow=&H40
ConstSWP_HideWindow=&H80
PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
PrivateDeclareFunctionSendMessageLongLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsLong)AsLong
PrivateDeclareFunctionPostMessageLib"user32"Alias"PostMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
ConstWM_Close=&H10
PrivateDeclareFunctioncapGetDriverDescriptionALib"avicap32.dll"(ByValwDriverAsInteger,ByVallpszNameAsString,ByValcbNameAsLong,ByVallpszVerAsString,ByValcbVerAsLong)AsBoolean
PrivateDeclareFunctioncapCreateCaptureWindowLib"avicap32.dll"Alias"capCreateCaptureWindowW"(ByVallpszWindowNameAsString,ByValdwStyleAsLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhwndParentAsLong,ByValnIDAsLong)AsLong
ConstWS_Child=&H40000000
ConstWS_Visible=&H10000000
ConstWS_Caption=&HC00000
ConstWS_ThickFrame=&H40000
ConstGET_Frame=1084
ConstWM_User=&H400 '用户消息开始号,偏移地址:
1024
ConstWM_CAP_GET_CAPSTREAMPTR=WM_User+1 '
ConstWM_CAP_SET_CALLBACK_ERROR=WM_User+2 '当出错回调函数
ConstWM_CAP_SET_CALLBACK_STATUS=WM_User+3 '当状态(status)改变的时回调函数
ConstWM_CAP_SET_CALLBACK_YIELD=WM_User+4 '在流捕获期间的回调函数
ConstWM_CAP_SET_CALLBACK_FRAME=WM_User+5 '帧预览回调函数
ConstWM_CAP_SET_CALLBACK_VIDEOSTREAM=WM_User+6'在流捕获期间,当一个新的视频缓存区可用的时候就调用它
ConstWM_CAP_SET_CALLBACK_WAVESTREAM=WM_User+7 '在流捕获期间,当一个新的音频缓存区可用的时候就调用它
ConstWM_CAP_GET_USER_DATA=WM_User+8'获取:
数据关联到一个捕捉窗口
ConstWM_CAP_SET_USER_DATA=WM_User+9'设置:
数据关联到一个捕捉窗口
ConstWM_CAP_DLG_VideoFormat=WM_User+41 '对话框:
视频格式
ConstWM_CAP_DLG_VideoSource=WM_User+42 '对话框:
视频源,枚举视频源,控制颜色、对比度、饱和度的改变。
需视频驱动程序支技
ConstWM_CAP_DLG_VideoDisplay=WM_User+43 '对话框:
视频显示?
控制视频捕捉过程中视频在显示器上的显示。
对捕捉数据无影响,但会影响数了信号表达式
ConstWM_CAP_DLG_VideoCompression=WM_User+46'对话框:
视频压缩
PrivateEnumenWinSet
' en_Copy=-1
es_Show=0
es_Hide
es_Close
es_Move
es_Size
EndEnum
'捕捉文件和缓存
ConstWM_Cap_File_Set_File=WM_User+20'设置当前的捕捉文件
ConstWM_Cap_File_Get_File=WM_User+21'得到当前的捕捉文件
ConstWM_CAP_FILE_ALLOCATE=WM_User+22'为捕捉文件预分配空间,从而可以减少被漏掉的帧
ConstWM_CAP_FILE_SaveAs=WM_User+23'将捕捉文件保存为另一个用户指定的文件。
这个消息不会改变捕捉文件的名字和内容,
'由于捕捉文件保留它最初的文件名,因此必须指定个新的文件的文件名来保存
ConstWM_CAP_FILE_SET_INFOCHUNK=WM_User+24'可以把信息块例如文本或者自定义数据插入avi文件。
同样用这个消息也可以清除avi文件中的信息块
ConstWM_CAP_FILE_SaveDIB=WM_User+25'把从帧缓存中复制出图像存为设备无关位图书馆(DIB),应用程序也可以使用这两个单帧捕捉消息来编辑帧序列,
'或者创建一个慢速摄影序列
ConstWM_CAP_Edit_Copy=WM_User+30'1054:
把缓存中图像复制到剪贴板中
ConstWM_CAP_SET_AUDIOFORMAT=WM_User+35'设置音频格式。
设置时传入一个WAVEFORMAT、WAVEFORMATEX、或PCMWAVEOFMAT结构的指针
ConstWM_CAP_GET_AUDIOFORMAT=WM_User+36'来得到音频数据的格式和该格式结构体的大小。
默认的捕捉音频格式是mono、8-bit和11kHZPCM
ConstWM_CAP_Get_VideoFormat=WM_User+44'给捕捉窗口来得到视频格式的结构和该结构的大小。
ConstWM_CAP_SET_VideoFormat=WM_User+45'用来设置视频格式
ConstWM_CAP_SET_PreView=WM_User+50'发送给捕捉窗口来使预览模式有效或者失效
ConstWM_CAP_SET_Overlay=WM_User+51'使窗口处于叠加模式。
使叠加模式有效也会自动地使预览模式失效
ConstWM_CAP_SET_PreViewRate=WM_User+52'发送给捕捉窗口来设置在预览模式下帧的显示频率
ConstWM_CAP_SET_Scale=WM_User+53'来使预览模式的缩放有效或者无效
ConstWM_CAP_SET_SCROLL=WM_User+55'如果是在预览模式或者叠加模式,还可以通过本消息发送给窗口,
'在窗口里的用户区域设置视频帧的滚动条的位置
PrivateTypeBitMapInfoHeader'tagBitMapInfoHeaderStructure
biSizeAsLong '
biWidthAsLong
biHeightAsLong 'LONGDWORD
biPlanesAsInteger 'WORD
biBitCountAsInteger
biCompressionAsLong
biSizeImageAsLong
biXPelsPerMeterAsLong
biYPelsPerMeterAsLong
biClrUsedAsLong
biClrImportantAsLong
EndType
PrivateTypeBitMapInfo
bmiHeaderAsBitMapInfoHeader'
bmiColorsAsByte 'RGBQUAD
EndType
'基本视频捕获消息--------------------------------------
ConstWM_CAP_Connect=WM_User+10 '连接一个视频驱动,成功返回真
(1)。
连接驱动后,不一定就能显示视频,还要保证摄像头硬件连接良好、未被其他程序使用。
ConstWM_CAP_DisConnect=WM_User+11'断开视频窗口与驱动的连接
' wParam:
视频设备序号,从0到9
ConstWM_CAP_Sequence=WM_User+62'开始录像
ConstWM_CAP_Stop=WM_User+68 '终止视频捕获
ConstWM_CAP_Abort=WM_User+69 '暂停录像捕获?
,成功返回真
ConstWM_CAP_Set_Sequence_Setup=WM_User+64
ConstWM_CAP_Get_Sequence_Setup=WM_User+65
'录像参数设置和获取
'DimnParmsAsCaptureParms
'SendMessagectCapWin,WM_CAP_Get_Sequence_Setup,Len(nParms),nParms'获取参数的设置
'nParms.fAbortLeftMouse=False'关闭:
单击鼠标停止录像的功能。
'SendMessagectCapWin,WM_CAP_Set_Sequence_Setup,Len(nParms),nParms'重新设置参数
PrivateTypeCaptureParms'
dwRequestMicroSecPerFrameAsLong 'DWORD
fMakeUserHitOKToCaptureAsBoolean'开始录像时,是否显示确认对话框,默认为假
wPercentDropForErrorAsLong'每毫秒捕捉帧率,默认66667,即每秒15帧
fYieldAsBoolean 'BOOL:
如果为TRUE,将产生一个后台线程来进行视频捕捉
dwIndexSizeAsLong 'DWORD:
视频文件最大的索引入口数
wChunkGranularityAsLong 'UINT:
以字节为单位表示AVI文件的大小
fUsingDOSMemoryAsBoolean 'BOOL:
未使用
wNumVideoRequestedAsLong 'UINT:
分配视频缓冲区的最大数量
fCaptureAudioAsBoolean '是否捕获音频流,默认值由具体的硬件设置
wNumAudioRequestedAsLong '分配的音频缓冲区的最大数量
vKeyAbortAsLong '结束录像的按键,默认为VK_ESCAPE(Esc键)
fAbortLeftMouseAsBoolean '单击鼠标左键停止录像,默认为真
fAbortRightMouseAsBoolean '单击鼠标右键停止录像,默认为假
fLimitEnabledAsBoolean '是否开启捕获时间限制,默认为真
wTimeLimitAsLong '捕获时间限制(秒),fLimitEnabled为真时有效
fMCIControlAsBoolean 'BOOL:
为TRUE,控制MCI(媒体设备接口)兼容的视频源
fStepMCIDeviceAsBoolean 'BOOL
dwMCIStartTimeAsLong 'DWORD:
以毫秒为单位标识MCI设备视频捕捉序列的起始位置,如果fMCIControl成员为FALSE,该成员被忽略
dwMCIStopTimeAsLong 'DWORD:
以毫秒为单位标识MCI设备视频捕捉序列的停止位置,如果fMCIControl成员为FALSE,该成员被忽略
fStepCaptureAt2xAsBoolean 'BOOL:
为TRUE,捕捉的视频帧使用两个分辨率
wStepCaptureAverageFramesAsLong':
在捕捉时每帧图像使用的时间大小
dwAudioBufferSizeAsLong '音频缓冲大小,默认0
fDisableWriteCacheAsBoolean'Win32系统未使用
AVStreamMasterAsLong '确定在写入AVI文件时,音频流是否控制时钟
EndType
'视频窗口消息--------------------------------------
'PrivateDeclareFunctioncapGetDriverDescriptionALib"avicap32.dll"(_
'ByValwDriverAsInteger,ByVallpszNameAsString,ByValcbNameAsLong,ByVallpszVerAsString,ByValcbVerAsLong)AsBoolean
'可利用此API获取所有驱动程序名称和版本信息。
例子:
' DimSAsLong
' DimlpszNameAsString*128
' DimlpszVerAsString*128
'
' Do
' IfNotcapGetDriverDescriptionA(S,lpszName,128,lpszVer,128)ThenExitDo'获得驱动程序名称和版本信息
' S=S+1
' Loop
ConstWM_CAP_Get_Status=WM_User+54'获取捕捉窗口的当前状态
PrivateTypeCapStatus'■■?
uiImageWidthAsLong '图像宽度,像素
uiImageHeightAsLong '图像高度,像素
fLiveWindowAsBoolean '视频显示是否使用预览
fOverlayWindowAsBoolean '视频显示是否使用硬件
fScaleAsBoolean '图像是否随窗口大小自动缩放
ptScrollAsPointAPI 'POINT?
fUsingDefaultPaletteAsBoolean'是否使用默认调色板
fAudioHardwareAsBoolean '是否安装了音频波形硬件
fCapFileExistsAsBoolean '是否生成了正确的捕获文件
dwCurrentVideoFrameAsLong
dwCurrentVideoFramesDroppedAsLong
dwCurrentWaveSamplesAsLong
dwCurrentTimeElapsedMSAsLong '视频流已录像时间(毫秒)
hPalCurrentAsLong 'HPALETTE当前调色板句柄
fCapturingNowAsBoolean '是否正在进行捕获
dwReturnAsLong '错误返回值,根据这个数值可以调用一个错误回调函数
wNumVideoAllocatedAsLong '视频缓冲
wNum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 程序 代码 摄像头 视频 图像 监控 截图 录像 改进