您的位置:首页 > 其它

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

2013-10-22 13:00 411 查看
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 ");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: