capFileSaveDIB(hWnd,str);

来源:互联网 发布:linux渗透测试命令 编辑:程序博客网 时间:2024/05/18 18:46
capFileSaveDIB(hWnd,str);

LRESULT CALLBACK VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
static int counter = 0;
char str[]="a.bmp";
str[0] = counter + '0';
counter++;
counter = counter % 10;//预留保存10张图片
capFileSaveDIB(hWnd,str);
return 0;
}

void CVFMDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
m_hCaptureWnd = capCreateCaptureWindow(NULL,WS_CHILD | WS_VISIBLE,1,1,10,10,m_hWnd,0);
capSetCallbackOnFrame(m_hCaptureWnd,VideoCallbackProc);
//capSetCallbackOnVideoStream(m_hCaptureWnd,&capVideoStreamCallback);
//capSetCallbackOnVideoStream意思是说当采集视频发生的时候,每采集一桢之后都会调用capVideoStreamCallback函数
if(m_hCaptureWnd == NULL)
{
   MessageBox("创建显示窗口失败");
   return;
}
//连接驱动程序
if (capDriverConnect(m_hCaptureWnd,0))
{
  
   ::SetParent(m_hCaptureWnd,*this);
   ::SetWindowLong(m_hCaptureWnd,GWL_STYLE,WS_CHILD);
   //把采集窗口置于Static控件内
   CRect wndRC;
   m_panel.GetClientRect(wndRC);
   m_panel.MapWindowPoints(this,wndRC);
   wndRC.DeflateRect(1,1,1,1);
   ::SetWindowPos(m_hCaptureWnd,NULL,wndRC.left,wndRC.top,wndRC.Width(),wndRC.Height(),SWP_NOZORDER);
   ::ShowWindow(m_hCaptureWnd,SW_SHOW);
   //设置捕捉源对话框
   CAPDRIVERCAPS CapDrvCaps;
   capDriverGetCaps(m_hCaptureWnd,&CapDrvCaps,sizeof(CAPDRIVERCAPS));
   if(CapDrvCaps.fHasDlgVideoSource) //设置捕捉源对话框
    capDlgVideoSource(m_hCaptureWnd);
   else
    return;
   //视频采集
   capDlgVideoFormat(m_hCaptureWnd);   //设置视频格式
   capPreviewRate(m_hCaptureWnd,30);   //每30秒监视一次
   capPreview(m_hCaptureWnd,TRUE);   //开始监视
}
else
{
   MessageBox("连接失败!");
   return ;
}
}

void CVFMDlg::OnBtnStop()
{
// TODO: Add your control notification handler code here
capCaptureStop(m_hCaptureWnd);
capPreview(m_hCaptureWnd, FALSE);
CWnd* pWnd=CWnd::FromHandle(m_hCaptureWnd);
pWnd->SendMessage(WM_CAP_DRIVER_DISCONNECT,0, 0L);
}

其余代码看看吧,没什么意义。

然后用MCI实现播放和录音,现在可以播放了,33行代码……
录音放到明天,太晚了,不录了。

原创粉丝点击