连接正常。就是黒屏///*
m_bInit=FALSE;
CWnd *pWnd=AfxGetMainWnd()->GetDlgItem(IDC_VIDEO);//得到预示窗口指针
CRect rect;
pWnd->GetWindowRect(&rect); // 得到窗口大小
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,rect.Width(),rect.Height(),
pWnd->GetSafeHwnd(),5); // 设置预示窗口
ASSERT(m_hCapWnd); if(capDriverConnect(m_hCapWnd,0))
{
CAPTUREPARMS CapParms = {0};
capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
CapParms.fCaptureAudio = FALSE;
CapParms.fYield = TRUE;
CapParms.wPercentDropForError = 50;
CapParms.fAbortLeftMouse =FALSE;
CapParms.fAbortRightMouse = FALSE;
capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms)); BITMAPINFO m_BmpInfo;
capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)); // 连接第0 号驱动器
m_bInit=TRUE; //得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap); if(m_CapDrvCap.fCaptureInitialized)
{// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}

解决方案 »

  1.   

    你可以跟踪一下代码,看是不是每条语句都执行了.
    看一下设备是不是正常(能否用WINDOWS自带的那个看视频),驱动是不是正常.是不是"0号驱动器", m_CapDrvCap, m_CapStatus正不正常
      

  2.   

    都正常。能保存文件正常。就是不能capPreview预览
      

  3.   

    是不是摄像头的采集格式不是RGB的,而是MJPG或者YUV的?
      

  4.   

    m_hWndVideo=capCreateCaptureWindow(NULL,WS_POPUP,1,1,10,10,m_hWnd,0);
    if(capDriverConnect(m_hWndVideo,0))
    {
    ::SetParent(m_hWndVideo,*this);
    ::SetWindowLong(m_hWndVideo,GWL_STYLE,WS_CHILD);
    CRect wndRc;
    m_Panel.GetClientRect(wndRc);
    m_Panel.MapWindowPoints(this,wndRc);
    wndRc.DeflateRect(1,1,1,1); ::SetWindowPos(m_hWndVideo,NULL,wndRc.left,wndRc.top,wndRc.Width(),
    wndRc.Height(),SWP_NOZORDER);
    ::ShowWindow(m_hWndVideo,SW_SHOW);
    capSetCallbackOnFrame(m_hWndVideo,PreviewCallback);
    capPreviewRate(m_hWndVideo,30);
    capPreview(m_hWndVideo,TRUE);
    }
      

  5.   

    m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"), 
    WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME, 
    0,0,rect.Width(),rect.Height(), 
    pWnd->GetSafeHwnd(),5); // 设置预示窗口 为什么要用5呢?
      

  6.   

    if(capDriverConnect(m_hCapWnd,0)) 

    CAPTUREPARMS CapParms = {0}; 
    capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms)); 
    CapParms.fCaptureAudio = FALSE; 
    CapParms.fYield = TRUE; 
    CapParms.wPercentDropForError = 50; 
    CapParms.fAbortLeftMouse =FALSE; 
    CapParms.fAbortRightMouse = FALSE; 
    capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms)); BITMAPINFO m_BmpInfo; 
    capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)); 
      这些是做什么用的呢?我的程序里没有这些,可以使用
    // 连接第0 号驱动器 
    m_bInit=TRUE; //得到驱动器的性能 
    capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap); if(m_CapDrvCap.fCaptureInitialized) 
    {// 如果初始化成功 
    capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态 
    capPreviewRate(m_hCapWnd,30); // 设置预示帧频 
    capPreview(m_hCapWnd,TRUE); // 设置预示方式 
    }
      

  7.   

    CAPDRIVERCAPS CapDriverCaps;
    ret = capDriverGetCaps(hwnd_Cam, &CapDriverCaps, sizeof (CAPDRIVERCAPS));
    if (CapDriverCaps.fHasDlgVideoFormat)
    ret = capDlgVideoFormat(hwnd_Cam);在格式对话框里面换着选YUV2或者MJPG格式的试一下看看,YUV2可以正常预览,但MJPG格式的用来录像更合适……
      

  8.   

    capDlgVideoFormat(hwnd_Cam);
    应该就是视频格式的问题,苦恼死我了,yuy2不知道怎么处理了,数据帧大小知道了,yuy2每个像素占2个字节,怎么处理????
      

  9.   

    capDlgVideoFormat(hwnd_Cam);
    应该就是视频格式的问题,苦恼死我了,yuy2不知道怎么处理了,数据帧大小知道了,yuy2每个像素占2个字节,怎么处理????
      

  10.   

      楼主已经结贴了,不过不知道有没有确实解决,你说的  yuy2 数据的问题, 我也遇到过,   用个函数进行转换成 RGB 应该就可以了。 解决方法留给有需要的人。  可以参考下我的解决方法:  http://blog.csdn.net/ljh_0728/article/details/7861927