解决方案 »

  1.   

    我在"开启视频回放"的按钮下加入了一下程序
    void CTEST1Dlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    m_hVideo=::capCreateCaptureWindow("Me",WS_CHILD | WS_VISIBLE,
        0,0,240,220,m_hWnd,0);    ghVideo=m_hVideo;
    capSetCallbackOnFrame(m_hVideo, FrameCallbackProc);
       
         char szDeviceName[80];
        char szDeviceVersion[80];
        int wIndex;    for (wIndex = 0; wIndex < 10; wIndex++)
    {
            if (capGetDriverDescription (wIndex, szDeviceName,
               sizeof (szDeviceName), szDeviceVersion,
               sizeof (szDeviceVersion)) )
    {
              
               if(capDriverConnect(m_hVideo,wIndex))
       {
       m_Combo3.AddString(szDeviceName);
      
       }
    } } GlobalAllocPtr(GHND,dwSize);
    capGetVideoFormat(m_hVideo,&m_BitmapInfo,sizeof(BITMAPINFO));
    m_iCameraheight=m_BitmapInfo.bmiHeader.biHeight;
        m_iCamerawidth=m_BitmapInfo.bmiHeader.biWidth;
        m_pImageIniDIB = new unsigned char [m_BitmapInfo.bmiHeader.biSizeImage];
       
    capPreviewRate(m_hVideo,50);//设置Preview模式的显示速率
        capPreview(m_hVideo,TRUE);//启动Preview模式
     //DO: Add extra initialization here   SetTimer(1,10,NULL);//启动定时器1,定时时间是10毫秒    

    }
      

  2.   

    在回调函数中将相应的BITMAP数据头和图像数据各存入一个指针数组中
    程序如下:
    BITMAPINFO m_BitmapInfo;
    LPBITMAPINFO lpbi;
    BYTE* pDIBDate  ;
    DWORD dataBytes ;
    BITMAPINFO* lp; 
     DWORD dwSize ;
    long dibwidth;
    long dibheight;
    long m_iCameraheight ;
    long m_iCamerawidth ;
    unsigned char * m_pImageIniDIB ;LRESULT CALLBACK FrameCallbackProc(HWND ghVideo, LPVIDEOHDR lpVHdr)
    {
       if (!ghVideo)
       return FALSE;   //dwSize=capGetVideoFormatSize(ghVideo);
      
       
       //dibwidth = lpbi->bmiHeader.biWidth;
       //dibheight = lpbi->bmiHeader.biHeight;
        //dataBytes = lpbi->bmiHeader.biSizeImage ; 
       //pDIBDate = (BYTE*) new char[dataBytes];
       //memcpy(lp,&(m_BitmapInfo.bmiHeader ) ,sizeof(BITMAPINFOHEADER));
       memcpy(m_pImageIniDIB,(char *)lpVHdr->lpData ,m_BitmapInfo.bmiHeader.biSizeImage);
       
         
        return (LRESULT) TRUE ;
    }                                          
      

  3.   

    现在不都用directX技术做视频通信了吗?