如题。
请多多指教?

解决方案 »

  1.   

    msdn里aviview的例子你看看吧。
      

  2.   

    把avi文件中的一个视频包取出来就可以显示了
      

  3.   

    以下是我写的程序
    在CAVIplayerDoc.h声明
    //略
    public:
        

        PAVIFILE pFile;
        PAVISTREAM pavi;
        AVISTREAMINFO avis;
        PGETFRAME pgf;

        LPBITMAPINFOHEADER lpbi;
        LPBYTE lpBuf; BOOL m_bOpened;//判断文件是否打开
    在另一个文件中:
    void CAVIplayerDoc::OnFileOpen()
    {
    CFileDialog dlg(TRUE,"AVI文件(.avi)|*.avi||",NULL,OFN_HIDEREADONLY,
       "AVI文件(.avi)|*.avi||",NULL);
    CString filename;
    if (dlg.DoModal()==IDOK)
    {
    filename=dlg.GetPathName();
    HRESULT hr;
    AVIFileInit();
    hr=AVIFileOpen(&pFile,filename,OF_SHARE_DENY_NONE|OF_READ,
    NULL);
    if (hr !=AVIERR_OK)
    { AVIFileExit();
        AfxMessageBox("无法打开AVI文件");
    return;
    } hr=AVIFileGetStream(pFile,&pavi,streamtypeVIDEO,0);
           if (hr!=AVIERR_OK)
       {    AVIFileExit();
        AfxMessageBox("无法打开AVI文件");
    return;
    }    AVISTREAMINFO si;

    AVIStreamInfo(pavi,&si,sizeof(AVISTREAMINFO));
        
    pgf = AVIStreamGetFrameOpen(pavi, NULL);

    lpbi= (LPBITMAPINFOHEADER)AVIStreamGetFrame(pgf, 1);//取第一帧
    lpBuf= LPBYTE(lpbi + lpbi->biSize + 256 * sizeof(RGBQUAD));
    m_bOpened=TRUE;
    UpdateAllViews(NULL);
    }
    }void CAVIplayerView::OnPaint()
    {
        CPaintDC dc(this);
    CAVIplayerDoc* pDoc=GetDocument(); if (pDoc->m_bOpened)
    {
        SetDIBitsToDevice(dc.m_hDC,0,0,pDoc->lpbi->biWidth,pDoc->lpbi->biHeight,
     0,0,0,pDoc->lpbi->biHeight,pDoc->lpBuf,(LPBITMAPINFO)pDoc->lpbi,
             DIB_RGB_COLORS);
        }
    }
    但图像总是无法显示出来,到底是什么原因呢?!!
    请各位大虾多多指教还有那位大虾用过DrawDibDraw函数,可以不用SetDIBitsToDevice而用DrawDibDraw函数吗?
    怎么用?!
      

  4.   

    我用DrawDibDraw可以在屏幕上显示一帧,但是想在一段时间内显示一系列帧时,用到了settimer函数,每隔1秒重画一帧,但是屏幕会很闪,不知大虾有什么其它方法使得屏幕不闪?