如何用avcapture控件来从摄像头读取数据,也就是使用什么函数?谢谢!

解决方案 »

  1.   

    http://rechard.vip.sina.com/AVCHelp.htm
      

  2.   

    GetCurrentImage方法 从当前视频流中抓取一帧图象到一个Picture对象中 参数:     无。 返回值:     如果成功返回一个Picture对象,该Picture对象中包含本方法调用所抓取的图象。 VB语法:     Dim Pic as StdPicture     Set Pic = Object.GetCurrentImage VC语法:     CPicture oPic;     oPic = Object.GetCurrentImage(); 说明:     该方法在当前视频流中以DIB位图格式抓取被调用瞬间的一帧图象,并以此位图创建和返回一个标准Picture对象。[为了保证该方法的成功调用,建议安装DirectX 8.x]
      

  3.   

    TCHAR    achDeviceName[80] ;
        TCHAR    achDeviceVersion[100] ;
    CString csBuffer;
        DWORD dwError ;
        HMENU hMenu ;

        m_hWndCap = capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,
    0,0, YCOLS, YROWS,/*m_rectView*/this->GetSafeHwnd(), (int) 0); RegisterHotKey(m_hWndCap,GlobalAddAtom("sdfsdf"),MOD_CONTROL,'S');    capCaptureGetSetup(m_hWndCap, &m_CapParms, sizeof(CAPTUREPARMS)) ;
    m_CapParms.wNumVideoRequested        = 10;
    m_CapParms.wPercentDropForError      = 10;
    m_CapParms.wNumAudioRequested        = 4;
    m_CapParms.fAbortLeftMouse           = 0x0;
    m_CapParms.fAbortRightMouse          = 0x0;
    m_CapParms.dwRequestMicroSecPerFrame = 1000000/FRAMES_FOR_PS;
    m_CapParms.dwAudioBufferSize         = AUDIOBUFFERLENGTH;
    m_CapParms.AVStreamMaster            = AVSTREAMMASTER_AUDIO;
    m_CapParms.vKeyAbort  = 'S';
    m_CapParms.fYield  = TRUE;

        capCaptureSetSetup(m_hWndCap, &m_CapParms, sizeof(CAPTUREPARMS)) ;

    WAVEFORMATEX wfex;

    wfex.wFormatTag  = WAVE_FORMAT_PCM;
    wfex.nChannels  = 1;             
    wfex.nSamplesPerSec  = 11025;
    wfex.nAvgBytesPerSec = 11025;
    wfex.nBlockAlign     = 1;
    wfex.wBitsPerSample  = 8;
    wfex.cbSize  = 0;

    capSetAudioFormat(m_hWndCap, &wfex, sizeof(WAVEFORMATEX)); 

        hMenu = GetSubMenu(::GetMenu(GetParent()->GetSafeHwnd()), 2) ;

    // capSetCallbackOnError(m_hWndCap, ErrorCallbackProc) ;
    // capSetCallbackOnStatus(m_hWndCap, StatusCallbackProc) ;
    capSetCallbackOnVideoStream(m_hWndCap, VideoCallbackProc) ;
    capSetCallbackOnFrame(m_hWndCap, FrameCallbackProc) ;
    capSetCallbackOnWaveStream(m_hWndCap, WaveStreamCallback); if (capGetDriverDescription(0, (LPTSTR)achDeviceName, sizeof(achDeviceName)/ sizeof(TCHAR),
                               (LPTSTR)achDeviceVersion, sizeof(achDeviceVersion)/sizeof(TCHAR))) 
    {
    csBuffer.Format("&%d %s", 0 , achDeviceName) ;
    // AppendMenu(hMenu, MF_ENABLED, IDM_O_DRIVERS, csBuffer) ;
    dwError = capDriverConnect(m_hWndCap, 0);
    // if (dwError) 
    // {
    // CheckMenuItem(::GetMenu(GetParent()->GetSafeHwnd()), IDM_O_DRIVERS, MF_BYCOMMAND | MF_CHECKED) ;
    // }
    }

    capSetVideoFormat(m_hWndCap,&m_InbmpInfoHeader,sizeof(BITMAPINFOHEADER));

        DrawMenuBar() ;
        CenterCaptureWindow(m_hWndCap) ;
        StartNewVideoChannel(m_hWndCap, 0) ;