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 ");
相关文章推荐
- MFC(5)读取AVI视频数据并且显示到界面窗口上源码
- 从AVI中读取每帧数据显示到界面
- PIXHAWK源码分析之二—Hello Sky(PIXHAWK读取姿态数据并且显示)
- C++ 从数据库读取数据,将数据显示在界面上的TreeCtrl上
- MFC子线程更改图像数据后更新主窗口图像显示方法
- jsonp从服务器读取数据并且予以显示
- MFC窗口视频显示方法--OpenCV DirectShow模式
- halcon在MFC界面显示视频方法
- 用OpenCV的VideoCapture类读取avi视频文件,并以帧流的形式显示出来!
- jsonp从服务器读取数据并且予以显示
- iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签
- 基于OpenCV+MFC的AVI视频文件读取及运动检测
- MFC建立一个文档视图的工程,然后在窗口上显示数据
- opencv实现视频的读取并且一帧一帧的显示出来
- STM32F103读取原始数据,上位机显示(附上微机和程序源码)
- springmvc从数据库中读取数据并且显示成选择框工具类
- SDL2.0在mfc窗口中显示yuv 数据
- MFC学习第八节:在数据库的数据在窗口中显示(显示多个学生时)
- MFC VS2010 读取txt中数据并显示
- win32强化练习2.1_简单加法计算器(界面文本与数据的读取和显示)