MFC(5)读取AVI视频数据并且显示到界面窗口上源码

 PGETFRAME Frame;
  BITMAPFILEHEADER BMPFileHeader;
  PAVIFILE aviFile;
  PAVISTREAM aviStream;
  AVISTREAMINFO aviStreamInfo;
//  int m_nFrameNumber;
  BITMAPINFO* m_pBitMapInfo;
//  BYTE* pData; 
  int cy; 
  int cx;
  int c;
  BYTE cz; 
  BYTE cw;
//  int Rate;
  HANDLE handle;
  CString m_cstrFileName;
  PGETFRAME pg;
  AVIFILEINFO fileInfo;

    CPaintDC dc(this);
	CWnd *pWnd = GetDlgItem(IDC_STATIC_PLAY2);
	CDC *pDC = pWnd->GetDC();
	ASSERT_VALID(pDC);
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect MyRect;
     pWnd->GetClientRect(MyRect);


  CFileDialog dlg( TRUE,_T("AVI"),_T("*.AVI"),
					 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
					 _T("Animation (*.AVI)|*.AVI|"));

	if( dlg.DoModal()==IDOK )
	{
		m_cstrFileName = dlg.GetPathName();
	}

    AVIFileInit();
    AVIFileOpen(&aviFile, m_cstrFileName, OF_READ, NULL);
    AVIFileGetStream(aviFile, &aviStream, streamtypeVIDEO, 0);
    AVIStreamInfo(aviStream, &aviStreamInfo, sizeof(aviStreamInfo));
    AVIFileInfo(aviFile, &fileInfo, sizeof(AVIFILEINFO));
    int iNumFrame=AVIStreamLength(aviStream);
    cx = fileInfo.dwWidth;
    cy = fileInfo.dwHeight;
//	Rate = fileInfo.dwScale;

    m_pBitMapInfo = new BITMAPINFO;
	BITMAPINFOHEADER bih2;
	long lsize = sizeof(bih2);
	int index=2;
    AVIStreamReadFormat(aviStream,index,&bih2,&lsize);
	BYTE* pData=new BYTE[10000];
    m_pBitMapInfo->bmiHeader.biBitCount = bih2.biBitCount;
	c=bih2.biSizeImage;
    m_pBitMapInfo->bmiHeader.biClrImportant=0; 
    m_pBitMapInfo->bmiHeader.biClrUsed=0; 
    m_pBitMapInfo->bmiHeader.biCompression=BI_RGB; 
    m_pBitMapInfo->bmiHeader.biHeight=cy; 
    m_pBitMapInfo->bmiHeader.biWidth=cx; 
    m_pBitMapInfo->bmiHeader.biPlanes=1; 
    m_pBitMapInfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
    m_pBitMapInfo->bmiHeader.biSizeImage = 0;
//	m_pBitMapInfo->bmiHeader.biSizeImage = (cx * 24 + 31) / 32 * 4 * cy;
    m_pBitMapInfo->bmiHeader.biXPelsPerMeter=0;
    m_pBitMapInfo->bmiHeader.biYPelsPerMeter=0; 
//    handle=GlobalAlloc(GHND,((long)((cx*24+31)/32*4)*cy)); 
//    pData=(BYTE*)GlobalLock(handle);

/*  BMPFileHeader.bfType = 0x4D42;
    BMPFileHeader.bfSize = (cx * 24 + 31) / 32 * 4 * cy + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //图像的总大小;
    BMPFileHeader.bfReserved1=0;
    BMPFileHeader.bfReserved2=0;
    BMPFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //24位真彩色位图恒为54;*/
//   for(int m_nFrameNumber=AVIStreamStart(aviStream);m_nFrameNumber<=AVIStreamLength(aviStream);m_nFrameNumber++)
//{

	pg = AVIStreamGetFrameOpen(aviStream, &(m_pBitMapInfo->bmiHeader)); 
//	pg = AVIStreamGetFrameOpen(aviStream, NULL); 
	for(int i=1;i<=iNumFrame;i++)
	{
    pData = (BYTE*)AVIStreamGetFrame(pg, i); 
//	BITMAPINFOHEADER bih2;
//	long lsize = sizeof(bih2);
//	int index=2;
//	AVIStreamReadFormat(aviStream,index,&bih2,&lsize);
//    cz = bih2.biSizeImage;
//	BYTE* Bits=new BYTE[bih2.biSizeImage];
//	AVIStreamRead(aviStream,index,1,Bits,bih2.biSizeImage,NULL,NULL);
//	for(int i=0;i<=bih2.biSizeImage;i++)
//	{
//	cz=pData[i];
//	cw=Bits[i];
//	}
	if(m_move==true)
			{
			CRect rc;
            rc.top=p_left;
        	rc.left=p_top;
        	rc.bottom=p_right;
	        rc.right=p_bottom;
            DrawRectLine(rc, RGB(255, 255, 0) , NULL);		
			}
	else
	{
	
	}
	//::StretchDIBits(pDC->GetSafeHdc(),0,0,400,300,0,0,400,300,pData+40,(BITMAPINFO*)m_pBitMapInfo,DIB_RGB_COLORS,SRCCOPY); 
	::StretchDIBits(pDC->GetSafeHdc(),0,0,MyRect.Width(),MyRect.Height(),0,0,cx,cy,pData+40,(BITMAPINFO*)m_pBitMapInfo,DIB_RGB_COLORS,SRCCOPY);
	//Sleep(int(1/fileInfo.dwRate));
	Sleep(100);
/*	if(m_nFrameNumber==AVIStreamLength(aviStream))
	{
       m_nFrameNumber=AVIStreamStart(aviStream);
	}*/
//}
	
	}
    AVIStreamGetFrameClose(pg);
    AVIFileRelease(aviFile);
	AVIFileExit();
		AfxMessageBox("the end ");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值