资源描述:
《谈谈使用vfw在windows下编程控制摄像头》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、谈谈使用VFW在windows下编程控制摄像头这段时间闲來无事,看了看MSDN的文档,自己翻译了一下。一是为了学习,二是对空闲时间的打发。所以也希望大家在拍砖的同时,尊重我的劳动,如要转贴请注明转至blog.csdn.net/suntaoznz。谢谢!孙涛2005-8-6Microsoft®VideoforWindows®(VFW)提供的Xi数以让应用程序去处理视频数据。VFW在16位Windows的时候就被引入了。它的许多重要功能已经被DirectX取代了。要获得更多的信息,你可以参考DirectX
2、的文档。下面讲介绍VFW的视频捕获:3.视频捕获你可以使用windows的AVICap类轻松地完成视频捕获。AVICap提供给应用程序一个简单的、基于消息的接口去访问视频设备和录音设备,并且可以控制处理视频流捕获。3.1关于视频捕获AVICap支持实是视频流捕获和实时单帧图像捕获。另外,AVICap提供了对视频源的控制(MCI媒体控制接口设备),因此使用者可以通过应用程序控制一个视频源开始和结束的位置,并且可以加大对帧捕获的控制。你使用AVICap类可以完成如下的任务:捕获声音和视频,并将他们写入到一
3、个AVI文件中。动态连接和断开视频和咅频的输入设备。使用覆盖或预览的方法去显示当前的视频信号。指定一个文件用于捕获,并且把这个捕获文件的内容拷贝给另一个文件。设定捕获图像速度(好多帧)。显示对话框用于控制视频源和格式。创建、保存、加载调色板。捕获并把图像作为一个DIB位图保存。3丄1视频捕获:最简单的方法视频捕获将数字化一个视频流和音频数据,并且将他们保存在硬盘和其他存储设备上。这里将描述如何在应用程序屮简单地应用视频捕获,它通过三句代码实现。它还介绍了如何通过发送消息给视频捕获窗口来结束或中断一个视
4、频会话。AVICap捕获窗口可以把捕获的音视频信息写入一个AVI文件中。你的应用程序可以自由地处理这个AVI文件、管理缓存区的咅视频数据、还可以在底层访问咅视频设备的驱动器。AVICap为应用程序提供了一个灵活的接口。你可以使用下而的代码,在你的应用程序中加入视频捕获:HWndC=capCreateCaptureWindow(nMyOwnCaptureWindow",WS_CHILD
5、WS_VISIBLE,0,0,160,120,hwndParent,nID);SendMessage(hWndC,WM
6、_CAP_DRIVER_CONNECI;0/*wlndex*/,0L);SendMessage(hWndC,WM_CAP_SEQUENCE,0,0L);宏接口同样有用,你可以选择是使用宏接口还是SendMessage函数来实现上面的功能,不过宏接口可以让你的代码更加容易理解。下面就使用了宏接口。HWndC=capCreateCaptureWindow(nMyOwnCaptureWindow",WS_CHILD
7、WS_VISIBLE,0,0,160,120,hwndParent,nID);capDriv
8、erConnect(hWndC,0);//宏接口//宏接口capCaptureSequenee(hWndC);你的应用程序创建AVICap捕获窗口,并和视频设备建立连接后。你创建的这个捕获窗口就准备捕获数据了。这时,你"J以通过发送WM_CAP_SEQUENCE消息(或capCaptureSequence宏)开始对数据进行捕获。WM_CAP_SEQUENCE将使用默认设置,开始对视频和音频进行捕获,并把数据放在一个CAPTURE.AVI的文件中,捕获动作将一直持续,除非有下面的事件发生:I用户按了ES
9、C键或者鼠标的按钮。I你的应用程序停止或者退出了捕获操作。I磁盘写满了。在应用程序中,你可以通过发送WM_CAP_STOP命令(或capCaptureStop)给捕获窗口,让它停止向文件写数据。你还可以通过发送WM_CAP_ABORT命令(或capCaptureAbort)给捕获窗口,让它屮断捕获操作。3.1.2捕获基本设置通过对定义在CAPTUREPARMS结构中的捕获参数进行修改,你可以完成:I改变捕获的帧频律(帧/秒);I指定用键盘或鼠标去结束一个捕获会话;I为一个捕获会话指定时间周期;捕获的帧
10、频率捕获的帧频率表示在一个捕获会话中,每秒要捕获多少帧。你通过WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到当前捕获的帧频率。当前的帧频率被保存在CAPTUREPARMS结构的dwRequestMicroSecPerFrame成员中。你可以对该值进行修改,从而去改变帧频率。该值为捕获一帧要用的时间(单位是微秒1/1000000秒),修改后,你可以发送WM_CAP_SET_SEQUENCE_SETU