VFW(videoforwindows)视频编程_第1页
VFW(videoforwindows)视频编程_第2页
VFW(videoforwindows)视频编程_第3页
VFW(videoforwindows)视频编程_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vfw (video for windows)视频编程2008-04-26 14:00 avicap 提供视频流的捕捉,并且可以是实时的单帧捕捉。另外, avicap 提供视频资源 媒体控制接口(media control interface )设备的控制,因此我们可以控制(当然是通过我们的应用程序了)视频资源(张坤注:应该是mci ,media control interface )的起、停位置,并且可以增加捕捉操作来加入帧捕捉的步骤!你用 avicap window class 创建的窗口,可以完成一下操作(张坤注:或者说是“ 有一下功能” ) :1捕捉声音、视频流到一个avi 文件。2动

2、态地连接视频、声音输入设备。3可以用覆盖,或者直接用preview 方法去显示一个实时变化的视频信号。4当开始捕捉的时候,指定一个文件(张坤注:用来存储捕捉到的视频的文件),并且把扑捉到的内容copy 到另外一个文件。5设置捕捉的频率;6显示对话框来控制视频资源(张坤注:应该是mci 吧)和格式。7创建、保存、加载调色板。8copy 图片,调色板到剪贴板上。9捕捉、保存一个单独的图片为一个设备无关的bitmap 如何使用视频捕捉相信你看完上面的翻译已经快要呕吐了 这么菜的水平还要上来丢人现眼没办法,谁然我这人脸皮厚呢 再说了,这年头脸皮厚吃香啊_ 比如说那个叫做什么姐姐的啦,我的脸皮厚还是跟她

3、学的呢。算了算了不多说了,只要你敢往下看,我就敢往下写 与其叫 “ 写” 还不如叫翻译吧。这部分包含了一些如何使用avicap window class 进行视、音频捕捉的步骤和例子1创建一个视频捕捉窗口。下面的例子用capcreatecapturewindow 函数创建了一个捕捉窗口;hwnd hwndc=capcreatecapturewindow( (lpstr) ” my capture window” ,/窗口名称ws_child | ws_visible,/设置窗口的类型0,/窗口左上角横坐标0,/窗口左上角纵坐标100,/窗口宽度100,/窗口高度(hwnd)hwndparent

4、, /父窗口句柄(int)nid /* 该窗口的id*/) 2连接视频捕捉设备驱动下面的例子连接捕捉窗口和msvideo 设备驱动,然后用capdriverdisconnect 宏断开。fok=sendmessage(hwndc, /接收消息的窗口句柄wm_cap_driver_connect, /发送的消息0, /消息附加参数0l/* 消息附加参数*/); 或者也可以用一个宏去连接msvedeo 驱动fok=capdriverconnect(hwndc,0);/其中的参数hwndc 是我们刚才创建的视频捕捉/窗口的句柄然后再调用capdriverdisconnect 宏断开视频捕捉驱动(这个

5、步骤一般在捕捉完毕后)capdriverdisconnect(hwndc); 3.下面的例子用capgetdriverdescription 函数去获取机器上安装的捕捉驱动的名字和版本char szdevicename80;/ 用来存放设备名称char szdeviceversion80;/ 用来存放驱动版本for(windex=0;windex10;windex+) if(capgetdriverdescription (windex,szdevicename,sizeof(szdevicename), szdeviceversversion,sizeof(szdeviceversion)

6、/把驱动的名字添加到一个list 里面,来供使用者选取; 3获取视频捕捉驱动的能力(张坤注:或者说是功能吧)wm_cap_driver_get_caps消 息 返 回 捕 捉 驱 动 的 能 力 和 并 把 这 些 结 果 放 入 一 个capdrivercaps结构体变量中,应用程序每一次连接一个新的捕捉驱动到捕捉窗口,并且回更新capdrivercaps结构体变量。下面的例子用capdrivergetcap 宏去获取捕捉驱动的功能。capdrivercaps capdrvcaps; sendmessage(hwndc,wm_cap_driver_get_caps, sizeof(capdr

7、ivercaps),(long)(lpvoid)&capdrvcaps); 上面用的是消息发送的形式,下面是用capdrivergetcaps 宏的方式来获取:capdrivergetcaps(hwndc,&capdrvcaps,sizeof(capdrivercaps); 4获取视频扑捉窗口的状态下面用 capgetstatus宏获取视频流的最大尺寸,然后用这个尺寸做为setwindowpos 函数的参数去设置捕捉窗口的尺寸)capstatus capstatus;capgetstatus(hwndc,&capstatus,sizof(capstatus); setw

8、indowpos(hwndc,null,0,0,capstatus.uiimagewidth,capstatus.uiimageheight, swp_nozorder | swp_nomove); 5显示视频属性设置对话框每种视频捕捉驱动都能提供三个不同的对话框用来控制视频数字化表面和捕捉进程,下面的例子向你展示如何显示这些对话框,在显示每个对话框之前,调用 capdrivergetcaps 宏并且核对返回的capdrivercaps结构体变量,看该视频捕捉驱动是否能显示这些对话框。capdrivercaps capdrvcaps; capdrivergetcaps(hwndc,&c

9、apdrvcaps,sizeof(capdrivercaps); /显示视频资源对话框if(capdrvcaps.fhasdlgvideosource) capdlgviceosource(hwndc); /显示视频格式对话框if(capdrvcaps.fhasdlgvideoformat) capdlgvideoformat(hwndc); if(capdrvcaps.fhasdlgvideodisplay) capdlgvideodisplay(hwndc); 6.获取、设置视频格式bitmapinfo结构体的长度是可变的,因此适应标准或压缩的数据格式。由于这个结构体的长度是可变的,因此应

10、用程序在获取当前视频格式之前必须经常检查结构体的长度,分配内存块。下面的例子用capgetvideoformatsize 宏来获取缓冲区的长度,然后调用 capgetvideoformat 宏来获取当前的视频格式。lpbitmapinfo lpbi; dword dwsize; dwsize=capgetvideoformatsize(hwndc); lpbi=globalallocptr(ghnd,dwsize); capgetvideoformat(hwndc,lpbi,dwsize); 切记:在访问完视频格式之后要释放刚才分配的内存;另外,globalallocptr这个宏是在windo

11、wsx.h 中定义的,如果用这个宏的话一定要记得包含这个头文件。7预览视频下面的例子用cappreviewrate 宏来设置帧输出率66ms(66 毫秒)然后用cappreview 宏来设置捕捉窗口的预览模式。cappreviewrate(hwndc,66); cappreview(hwndc,true); cappreview(hwndc ,false); 8允许视频覆盖下面的例子用capdrivergetcaps 宏来检测一个视频捕捉驱动是否支持覆盖,如果是则用capoverlay 宏去允许覆盖;capdrivercaps capdrvcaps; capdrivergetcaps(hwnd

12、c,&capdrvcaps,sizeof(capdrivercaps); if(capdrvcaps.fhasoverlay) capoverlay(hwndc,true); 9.命名视频捕捉文件下面的例子用capfilesetcapturefile 宏来为视频捕捉文件准备一个文件名(mycap.avi )并且用 capfilealloc 宏来预分配一个5m 的空间;char szcapturefile=” mycap.avi”;capfilesetcapturefile(hwndc,szcapturefile); capfilealloc(hwndc,(1024*1024*5); 1

13、0.格式化声音捕捉(张坤注:也就是设置声音捕捉格式,设置声音采样格式)下面用 capsetaudioformat 设置声音采样格式为11khz pcm 8bit 立体声waveforma tex wfex; wfex.wformattag = w ave_format_pcm; wfex.nchannels = 2; / 双声道,立体声wfex.nsamplespersec = 11025; wfex.navgbytespersec = 22050; wfex.nblockalign = 2; wfex.wbitspersample = 8; wfex.cbsize = 0; capsetaudioformat(hwndc, &wfex, sizeof(waveformatex); 11改变声音采样格式captureparms captureparms; float framespersec=10.0; capcapturegetsetup(hwndc,&captureparams,sizeof(captureparams); captureparms.dwrequestmicrosecperframe=(dowrd)(1.0e6/framespersec); capcapturesetsetup(hwndc,&cap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论