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 ");
MFC(5)读取AVI视频数据并且显示到界面窗口上源码
最新推荐文章于 2023-12-03 11:25:50 发布