VC++实现视频捕获编程
2010-07-20 20:45:00 来源:WEB开发网三、AVICap编程示例
下面以一个简单的应用程序为例说明AVICap的使用,该程序对输入的视频流进行实时的显示和捕获,演示需要一个视频捕获卡和摄像头。界面中的菜单项如图1所示。其中,菜单项Display可以以Preview或Overlay模式显示图像;菜单项Setting可通过弹出AVICap提供的对话框VideoSource、VideoFormat和VideoDisplay来对捕获进行设置,图4中的图像就是按照图2、图3的对话框所示进行设置、以Preview模式显示的结果;菜单项Capture可将视频流或单帧图像捕获到指定的文件中去。
由于篇幅有限,下面仅介绍与视频捕获相关的编程。
1、定义全局变量:
HWNDghWndCap;//捕获窗的句柄
CAPDRIVERCAPSgCapDriverCaps;//视频驱动器的能力
CAPSTATUSgCapStatus;//捕获窗的状态
2、处理WM_CREATE消息:
//创建捕获窗,其中hWnd为主窗口句柄
ghWndCap=capCreateCaptureWindow((LPSTR)"CaptureWindow",WS_CHILD|WS_VISIBLE,0,0,300,240,(HWND)hWnd,(int)0);
//登记三个回调函数,它们应被提前申明
capSetCallbackOnError(ghWndCap,(FARPROC)ErrorCallbackProc);capSetCallbackOnStatus(ghWndCap,(FARPROC)StatusCallbackProc);capSetCallbackOnFrame(ghWndCap,(FARPROC)FrameCallbackProc);
capDriverConnect(ghWndCap,0);//将捕获窗同驱动器连接
//获得驱动器的能力,相关的信息放在结构变量gCapDriverCaps中
capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVERCAPS));
3、处理WM_CLOSE消息:
//取消所登记的三个回调函数
capSetCallbackOnStatus(ghWndCap,NULL);
capSetCallbackOnError(ghWndCap,NULL);
capSetCallbackOnFrame(ghWndCap,NULL);
capCaptureAbort(ghWndCap);//停止捕获
capDriverDisconnect(ghWndCap);//将捕获窗同驱动器断开
4、处理菜单项Preview:
capPreviewRate(ghWndCap,66);//设置Preview模式的显示速率
capPreview(ghWndCap,TRUE);//启动Preview模式
5、处理菜单项Overlay:
if(gCapDriverCaps.fHasOverlay)//检查驱动器是否有叠加能力
capOverlay(ghWndCap,TRUE);//启动Overlay模式
6、处理菜单项Exit:
SendMessage(hWnd,WM_CLOSE,wParam,lParam);
赞助商链接