用这个代码可以捕获视频!
void CServerPlusDlg::InitVideoCard()
{
this->m_hWndCapture=::capCreateCaptureWindow("Capture Window",WS_VISIBLE|WS_CHILD,0,0,320,240,this->m_hWnd,1);
capDriverConnect(this->m_hWndCapture,0);
//set the video format 
capSetVideoFormat(this->m_hWndCapture,&this->m_InInfo,sizeof(BITMAPINFO));

capPreviewRate(this->m_hWndCapture,40);
// capDlgVideoFormat(this->m_hWndCapture);
capPreview(this->m_hWndCapture,TRUE);
capSetCallbackOnFrame(this->m_hWndCapture,FrameCallBack);
}

解决方案 »

  1.   

    谢谢
    可是这是VFW的简单调用
    无法解决问题
      

  2.   

    有些东西是由采集卡的驱动程序决定的(比如采集的图像的大小),通过 vfw 或 dshow 无法控制
    dshow 的 preview 相当于 vfw 的 overlay
             capture 相当于 vfw 的 preview
    dshow 采集单帧图像很难,一般只能通过 capture pin ,不过这样会大大降低回放的速度,preview pin 上所有获取数据的功能都不好用,包括录像等,所以视频采集不推荐使用它(个人观点)。
    direct show 的回放的大小可以通过拉伸修改的(这是video render的功能),效果一般不太好。
    找一找采集卡新的驱动程序可能会解决问题
      

  3.   

    已经在网上找了N遍了:)驱动已是最新的
    所以才到这儿来..
    不过 dshow的preview的确很差,和VFW的Overlay(98下)无法相比
    我现在正在看IOverlay,可能能解决一些问题
    记得原来好像用IBasicVideo2捕获过单桢,应该可以吧??
    正在测试之中
    谢谢您的意见
      

  4.   

    我用过华硕的有视频输入的显示卡,vfw 可以采集768x576的图像。用dshow只要一接上 capture 速度就变得巨慢,如果接 preview 就无法获取任何图像数据。dshow 采集单帧图像好像只能用 ISampleGrabber ,必须以 preview 模式,cpu 占用率很高的。
      

  5.   

    是在2000下吗?
    98下好像很容易办到,可在2000下。。
    好的
    我会试试ISampleGrabber的:)不过我还是想用Overlay