扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:刘 涛 来源:yesky 2007年11月16日
关键字: Visual C++ 实现 AVI 图像截取
//Cavi类头文件定义; class CAvi file://AVI类,处理AVI文件 { public: int cy;//图象高 int cx;//图象宽 file://long m_maxFrame; BYTE *pData;//寸储图象数据 BITMAPINFO *m_pBMI;//位图文件信息头 PAVISTREAM pavi;//AVI流 PAVIFILE pfile;//AVI文件指针 AVIFILEINFO * pfi; file://AVI信息 BOOL AviRead(int mFrame);//读AVI文件的第mFrame帧 CAvi();//标准构造函数 CAviCreate(CString &string);//用文件名初始化AVI类的成员 virtual ~CAvi(); }; //Cavi类文件实现部分; CAvi::CAvi() { AVIFileInit();//初始化AVI库 cx=0;//定义图象宽、高、等成员 cy=0; m_pBMI=NULL; pData=NULL; file://m_maxFrame=0; pfi=NULL; } CAvi::~CAvi()//析构、释放指针 { // AVIFileClose(pfile); AVIFileExit(); if(pData!=NULL) delete pData; pData=NULL; if(m_pBMI!=NULL) delete m_pBMI; m_pBMI=NULL; if(pfi!=NULL) delete pfi; pfi=NULL; } CAvi::CAviCreate(CString &string)//读文件初始化该类 { HRESULT hr; pfi=new AVIFILEINFO; hr = AVIFileOpen(&pfile, // returned file pointer string, // file name OF_READ, // mode to open file with NULL); hr= AVIFileInfo(pfile, file://获取AVI信息,放入pfi中 pfi, sizeof(AVIFILEINFO) ); cx=pfi->dwWidth;//图象宽、高 cy=pfi->dwHeight; hr=AVIFileGetStream(//将AVI变成视频流 pfile, &pavi, streamtypeVIDEO, 0//LONG lParam ); m_pBMI=new BITMAPINFO;//定义BMP信息头 m_pBMI->bmiHeader.biBitCount=24; m_pBMI->bmiHeader.biClrImportant=0; m_pBMI->bmiHeader.biClrUsed=0; m_pBMI->bmiHeader.biCompression=BI_RGB; m_pBMI->bmiHeader.biHeight=cy; m_pBMI->bmiHeader.biWidth=cx; m_pBMI->bmiHeader.biPlanes=1; m_pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); m_pBMI->bmiHeader.biXPelsPerMeter=0; m_pBMI->bmiHeader.biYPelsPerMeter=0; m_pBMI->bmiHeader.biSizeImage=cx*cy*3; pData=(BYTE*)new char[cx*cy*3];//根据AVI中BMP图象的信息定义缓冲区 } BOOL CAvi::AviRead(int mFrame)//将AVI文件的M帧数据读入PData缓冲区 { HRESULT hr; hr= AVIStreamRead( pavi, mFrame, 1, pData, cx*cy*3, NULL, NULL ); if(hr==0) return TRUE; else return FALSE; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者