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 ");