

已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 属性设置为 0Check1:在属性窗口将 Index 属性设置为 0,将 Style 属性设置为 1Picture1:不必设置任何属性Timer1:不必设置任何属性程序调试时要注意:终止程序要用运行中的 Form1 窗口关闭。不要使用 VB 主窗口的菜单命令或 VB 工具栏上的关闭按钮,这样无法关闭打开的视频窗口,导致 VB 无响应。如果 VB 无响应,只有用系统任务管理器才能终止 VB 进程,调试过程中所做的修改将丢失。本人原创,转载请注明来源:/100bd/blog/item/525292c3a37f210d0ff47724.htmlPublic ctCapWin As Long, ctRec As Boolean, ctDir As String, ctF As String, ctAutoSize As BooleanDim ctRefresh As Boolean, ctConnect As Boolean, ctAutoHide As Boolean, IsFillScreen As BooleanPrivate Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As LongPrivate Type PointAPIX As Long: Y As LongEnd TypePrivate 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 LongConst HWND_Top = 0hWndInsertAfter 参数:Z序列的顶部Const HWND_TopMost = -1最前Const HWND_NoTopMost = -2不在最前Const HWND_Bottom = 1位于底层Const SWP_NoSize = &H1wFlags 参数Const SWP_NoMove = &H2Const SWP_NoZorder = &H4Const SWP_NoActivate = &H10Const SWP_ShowWindow = &H40Const SWP_HideWindow = &H80Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As LongPrivate Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongConst WM_Close = &H10Private 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 BooleanPrivate 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 LongConst WS_Child = &H40000000Const WS_Visible = &H10000000Const WS_Caption = &HC00000Const WS_ThickFrame = &H40000Const GET_Frame = 1084Const WM_User = &H400用户消息开始号,偏移地址:1024Const WM_CAP_GET_CAPSTREAMPTR = WM_User + 1Const 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 enWinSeten_Copy = -1es_Show = 0es_Hidees_Closees_Movees_SizeEnd Enum捕捉文件和缓存Const WM_Cap_File_Set_File = WM_User + 20 设置当前的捕捉文件Const WM_Cap_File_Get_File = WM_User + 21 得到当前的捕捉文件Const WM_CAP_FILE_ALLOCATE = WM_User + 22 为捕捉文件预分配空间,从而可以减少被漏掉的帧Const WM_CAP_FILE_SaveAs = WM_User + 23 将捕捉文件保存为另一个用户指定的文件。这个消息不会改变捕捉文件的名字和内容,由于捕捉文件保留它最初的文件名,因此必须指定个新的文件的文件名来保存Const WM_CAP_FILE_SET_INFOCHUNK = WM_User + 24 可以把信息块例如文本或者自定义数据插入avi文件。同样用这个消息也可以清除avi文件中的信息块Const WM_CAP_FILE_SaveDIB = WM_User + 25 把从帧缓存中复制出图像存为设备无关位图书馆(DIB),应用程序也可以使用这两个单帧捕捉消息来编辑帧序列,或者创建一个慢速摄影序列Const WM_CAP_Edit_Copy = WM_User + 30 1054:把缓存中图像复制到剪贴板中Const WM_CAP_SET_AUDIOFORMAT = WM_User + 35 设置音频格式。设置时传入一个WAVEFORMAT、WAVEFORMATEX、或PCMWAVEOFMAT结构的指针Const WM_CAP_GET_AUDIOFORMAT = WM_User + 36 来得到音频数据的格式和该格式结构体的大小。默认的捕捉音频格式是mono、8-bit和11kHZ PCMConst WM_CAP_Get_VideoFormat = WM_User + 44 给捕捉窗口来得到视频格式的结构和该结构的大小。Const WM_CAP_SET_VideoFormat = WM_User + 45 用来设置视频格式Const WM_CAP_SET_PreView = WM_User + 50 发送给捕捉窗口来使预览模式有效或者失效Const WM_CAP_SET_Overlay = WM_User + 51 使窗口处于叠加模式。使叠加模式有效也会自动地使预览模式失效Const WM_CAP_SET_PreViewRate = WM_User + 52 发送给捕捉窗口来设置在预览模式下帧的显示频率Const WM_CAP_SET_Scale = WM_User + 53 来使预览模式的缩放有效或者无效Const WM_CAP_SET_SCROLL = WM_User + 55 如果是在预览模式或者叠加模式,还可以通过本消息发送给窗口,在窗口里的用户区域设置视频帧的滚动条的位置Private Type BitMapInfoHeader tagBitMapInfoHeader StructurebiSize As LongbiWidth As LongbiHeight As LongLONG DWORDbiPlanes As IntegerWORDbiBitCount As IntegerbiCompression As LongbiSizeImage As LongbiXPelsPerMeter As LongbiYPelsPerMeter As LongbiClrUsed As LongbiClrImportant As LongEnd TypePrivate Type BitMapInfobmiHeader As BitMapInfoHeader bmiColors As ByteRGBQUADEnd Type基本视频捕获消息-Const WM_CAP_Connect = WM_User + 10连接一个视频驱动,成功返回真(1)。连接驱动后,不一定就能显示视频,还要保证摄像头硬件连接良好、未被其他程序使用。Const WM_CAP_DisConnect = WM_User + 11 断开视频窗口与驱动的连接wParam:视频设备序号,从 0 到 9Const WM_CAP_Sequence = WM_User + 62 开始录像Const WM_CAP_Stop = WM_User + 68终止视频捕获Const WM_CAP_Abort = WM_User + 69暂停录像捕获?,成功返回真Const WM_CAP_Set_Sequence_Setup = WM_User + 64Const WM_CAP_Get_Sequence_Setup = WM_User + 65录像参数设置和获取Dim nParms As CaptureParmsSendMessage ctCapWin, WM_CAP_Get_Sequence_Setup, Len(nParms), nParms获取参数的设置nParms.fAbortLeftMouse = False 关闭:单击鼠标停止录像的功能。SendMessage ctCapWin, WM_CAP_Set_Sequence_Setup, Len(nParms), nParms重新设置参数Private Type CaptureParms dwRequestMicroSecPerFrame As LongDWORDfMakeUserHitOKToCapture As Boolean 开始录像时,是否显示确认对话框,默认为假wPercentDropForError As Long 每毫秒捕捉帧率,默认66667,即每秒15帧fYield As BooleanBOOL:如果为TRUE,将产生一个后台线程来进行视频捕捉dwIndexSize As LongDWORD:视频文件最大的索引入口数wChunkGranularity As LongUINT:以字节为单位表示AVI文件的大小fUsingDOSMemory As BooleanBOOL:未使用wNumVideoRequested As LongUINT:分配视频缓冲区的最大数量fCaptureAudio As Boolean是否捕获音频流,默认值由具体的硬件设置wNumAudioRequested As Long分配的音频缓冲区的最大数量vKeyAbort As Long结束录像的按键,默认为 VK_ESCAPE(Esc键)fAbortLeftMouse As Boolean单击鼠标左键停止录像,默认为真fAbortRightMouse As Boolean单击鼠标右键停止录像,默认为假fLimitEnabled As Boolean是否开启捕获时间限制,默认为真wTimeLimit As Long捕获时间限制(秒),fLimitEnabled 为真时有效fMCIControl As BooleanBOOL:为TRUE,控制MCI(媒体设备接口)兼容的视频源fStepMCIDevice As BooleanBOOLdwMCIStartTime As LongDWORD:以毫秒为单位标识MCI设备视频捕捉序列的起始位置,如果fMCIControl成员为FALSE,该成员被忽略dwMCIStopTime As LongDWORD:以毫秒为单位标识MCI设备视频捕捉序列的停止位置,如果fMCIControl成员为FALSE,该成员被忽略fStepCaptureAt2x As BooleanBOOL:为TRUE,捕捉的视频帧使用两个分辨率wStepCaptureAverageFrames As Long :在捕捉时每帧图像使用的时间大小dwAudioBufferSize As Long音频缓冲大小,默认0fDisableWriteCache As Boolean Win32系统未使用AVStreamMaster As Long确定在写入AVI文件时,音频流是否控制时钟End Type视频窗口消息-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可利用此 API 获取所有驱动程序名称和版本信息。例子:Dim S As LongDim lpszName As String * 128Dim lpszVer As String * 128DoIf Not capGetDriverDescriptionA(S, lpszName, 128, lpszVer, 128) Then Exit Do 获得驱动程序名称和版本信息S = S + 1LoopConst WM_CAP_Get_Status = WM_User + 54 获取捕捉窗口的当前状态Private Type CapStatus ?uiImageWidth As Long图像宽度,像素uiImageHeight As Long图像高度,像素fLiveWindow As Boolean视频显示是否使用预览fOverlayWindow As Boolean视频显示是否使用硬件fScale As Boolean图像是否随窗口大小自动缩放ptScroll As PointAPIPOINT?fUsingDefaultPalette As Boolean 是否使用默认调色板fAudioHardware As Boolean是否安装了音频波形硬件fCapFileExists As Boolean是否生成了正确的捕获文件dwCurrentVideoFrame As LongdwCurrentVideoFramesDropped As LongdwCurrentWaveSamples As LongdwCurrentTimeElapsedMS As Long视频流已录像时间(毫秒)hPalCurrent As LongHPALETTE 当前调色板句柄fCapturingNow As Boolean是否正在进行捕获dwReturn As Long错误返回值,根据这个数值可以调用一个错误回调函数wNumVideoAllocated As Long视频缓冲wNumAudioAllocated As Long音频缓冲End TypePrivate Sub CloseMouse()Dim nParms As CaptureParmsSendMessage ctCapWin, WM_CAP_Get_Sequence_Setup, Len(nParms), nParms获取参数的设置nParms.fMakeUserHitOKToCapture = True 开始录像时,是否显示确认对话框nParms.fYield = True 用一个后台线程来进行视频捕捉nParms.fAbortLeftMouse = False关闭:单击鼠标左键停止录像的功能。nParms.fAbortRightMouse = False 关闭:单击鼠标右键停止录像的功能SendMessage ctCapWin, WM_CAP_Set_Sequence_Setup, Len(nParms), nParms 重新设置参数ff = SendMessageLong(ctCapWin, WM_CAP_SET_CALLBACK_STATUS, 0, AddressOf CallBackStatus) 状态回调函数ff = SendMessageLong(ctCapWin, WM_CAP_SET_CALLBACK_FRAME, 0, AddressOf MyFrameCallback) 帧回调函数ff = SendMessageLong(ctCapWin, WM_CAP_SET_CALLBACK_YIELD, 0, AddressOf CallbackYield)End SubPrivate Sub NoRecord()SendMessage ctCapWin, WM_CAP_Stop, 0, 0 停止录像ctRec = False: Call SetCaption(" ")End SubPrivate Sub StartRecord()Dim F As String, nDir As String, nF As String如果路径不存在,用默认文件名 C:CAPTURE.AVInDir = Trim(ctDir)If nDir = "" Or nDir = "<>" Or nDir = "<默认>" Then nDir = App.Path & "videos"If Right(nDir, 1) <> "" Then nDir = nDir & ""If Not MakePath(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安全员C证云南版高频题集
- 2025年健康管理实务考试试题及答案解析
- 2025年建筑环境设计师专业水平检测试题及答案解析
- 2025年航空安全管理专家考试试题及答案解析
- 2025年机关消防演练测试题及答案
- 机电润滑基础知识培训课件
- 2025年企业员工安全考核题库及答案
- 2025年慈善基金会招聘笔试预测题
- 2025年安全生产安全文化测试题含答案
- 2025年工程造价师资格认证考试试题及答案解析
- 2025至2030中国家用美容仪器行业项目调研及市场前景预测评估报告
- GB 30080-2025铜及铜合金熔铸安全设计与生产规范
- 2025国投生物制造创新研究院有限公司招聘(31人)笔试备考题库及答案解析
- 人教版九年级化学上册教学课件:第七单元 课题一 第1课时 燃烧的条件 灭火的原理和方法
- 国网面试模拟题:电网运营与规划类面试题目及答案
- 关于外墙维修的方案(3篇)
- 医院空气净化标准
- 抑郁病诊断证明书
- 维克多高中英语3500词汇
- 中国监察制度史
- 供水公司主要安全风险公告栏(总)
评论
0/150
提交评论