http://tech.163.com/06/0306/09/2BH6GV2400091LRC.html


简单的摄像头视频浏览和捕获程序
新建一个基于对话框的工程,引用头文件 ,导入 vfw32.lib 库,库文件可以在vc存在路径中找到;

如:D:\Program Files\Microsoft Visual Studio\VC98\Lib\vfw32.lib

在窗体上添加四个个按钮,修改ID为IDC_VIDEO , IDC_CAPTURE , IDC_STOPVIDEO , IDC_STOPCAPTURE;

为按钮IDC_VIDEO添加代码开始浏览视频:

{

//create a window for captureWindow

CWnd *mywnd=new CWnd;

mywnd->Create(_T("STATIC"), "", WS_CHILD WS_VISIBLE,CRect(0, 0, 400, 400), this, 1234);

mywnd->ShowWindow(SW_SHOW);

CRect rect;

mywnd->GetWindowRect(rect);

//create capture window

/*捕获窗体类似于一个标准控件(不如按钮、列表框…),它一般使用ws_child 和 ws_visible窗口类型。

创建一个avicap捕获窗口
       使用capcreatecapturewindow 函数可以创建一个avicap的捕获窗口。这个函数返回一个窗口句柄,这个句柄就是捕获窗口的句柄,后面其他操作就是通过发送消息给该句柄来实现。你可以在一个程序中创建多个捕获窗口,并且每个窗口连接到不同的捕获设备上。
*/

ghCapWnd=capCreateCaptureWindow( "My Own Capture Window",WS_CHILD WS_VISIBLE ,0, 0, (rect.right-rect.left), (rect.bottom-rect.top), mywnd->GetSafeHwnd(), 1235);

//connect device

/*建立捕获窗口到捕获设备的连接
你可以动态地连接或断开捕获窗口与设备间的链接。通过使用wm_cap_drivr_connect消息(或capdriverconnect宏),可以实现捕获窗体与设备驱动间的连接。当捕获窗体和捕获设备驱动连接后,你就可以发送针对设备的消息给该窗体了
*/
// ::SendMessage( ghCapWnd, WM_CAP_DRIVER_CONNECT, 0, 0L);

capDriverConnect (ghCapWnd, 0);

//get params

/*如果你的系统安装了多个捕获设备,你可以通过在发送wm_cap_driver_connect消息时,设置wprarm参数(integer)。来指定捕获窗口与那个具体的视频捕获设备相连接。

wprarm参数是一个整数,它表示一个系统已经安装的视频捕获设备列表的索引(注册表中或这system.ini [drivers]中的信息)。该列表的索引从0开始。

       通过capgetdriverdescription函数可以获得安装的捕获驱动程序的名称和版本。你的应用程序可以使用这个函数列举除安装的所有捕获设备,让用户可以选择其中一个去与捕获窗口相联。 

通过发送wm_cap_driver_get_name消息(capdrivergetname宏),可以获得与指定窗体连接的捕获设备的名称。通过发送wm_cap_driver_get_version消息(capdrivergetversion宏),可以获得与指定窗体连接的捕获设备的版本。 

通过发送wm_cap_driver_disconnect消息(capdrivergetdisconnect宏),可以断开连接。当捕获窗体销毁后,任何连接的视频捕获设备都将自动断开。 

*/

/*捕捉参数的结构体CAPTUREPARMS
设置
获得当前的捉摸频率:capCaptureGetSetup()或WM_CAP_GET_SEQUENCE_SETUP

修改后的消息设置:capCaptureSetSetup或WM_CAP_SET_SEQUENCE_SETUP
*/


CAPTUREPARMS CapParms;

capCaptureGetSetup(ghCapWnd,&CapParms,sizeof (CAPTUREPARMS))

//设置桢速

CapParms.dwRequestMicroSecPerFrame=40000;

//有无时间限制

CapParms.fLimitEnabled = FALSE;

//是否捕捉音频

CapParms.fCaptureAudio = FALSE;

//MCI Device支持

CapParms.fMCIControl = FALSE;

//设置窗口,如果为false,捕捉画面在桌面上

CapParms.fYield = TRUE;

//停止捕捉键设置

CapParms.vKeyAbort = VK_ESCAPE;

CapParms.fAbortLeftMouse = FALSE;

CapParms.fAbortRightMouse = FALSE;

capCaptureSetSetup(ghCapWnd,&CapParms,sizeof (CAPTUREPARMS));

//设置预览时的比例

capPreviewScale(ghCapWnd, 1);

//设置预览时的帧频率

capPreviewRate(ghCapWnd,66);

//是否支持比例变化

capPreviewScale(ghCapWnd,FALSE);

//打开预览

capPreview(ghCapWnd, 1);

}

为IDC_CAPTURE添加代码开始捕获视频:

{

capCaptureSequence(ghCapWnd);

}

为IDC_STOPCAPTURE添加代码停止捕捉:

{

capCaptureAbort(ghCapWnd);

}

为IDC_STOPVIDEO添加代码断开连接:

{

capDriverDisconnect(ghCapWnd);

}

此程序只是简单的显示和捕捉视频, 旨在给那些像我一样搜到很多资料但又没有找到入口点的菜鸟一个入口,至于更高深的内容还有待各位大侠不吝赐教

posted on 2006-04-05 16:45  泡泡  阅读(1077)  评论(0编辑  收藏  举报