求bmp转avi的代码

boshikeji 2010-09-30 08:29:25
新手,一点思路也没。
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
boshikeji 2010-10-13
  • 打赏
  • 举报
回复
void CLlDlg::BmpsToAvi(LPCSTR szFileName, LPCSTR szDir)
{

CString BmpDir = szDir;
BmpDir+=_T("\\*.*");
AVIFileInit();
AVISTREAMINFO strhdr;
PAVIFILE pFile;
PAVISTREAM ps;
AVICOMPRESSOPTIONS pcompressoption;
int nframes=0;
CFileFind flFind;
BOOL bret = flFind.FindFile(BmpDir);
while(bret)
{
bret = flFind.FindNextFile();
if (!flFind.IsDots()&&!flFind.IsDirectory())
{
CString flname = flFind.GetFilePath();
FILE * pf=fopen(flname,"rb");
BITMAPFILEHEADER bmpFileHdr;
BITMAPINFOHEADER bmpInfoHdr;
fseek(pf,0,SEEK_SET);
fread(&bmpFileHdr,sizeof(BITMAPFILEHEADER),1,pf);
fread(&bmpInfoHdr,sizeof(BITMAPINFOHEADER),1,pf);
if (nframes==0)
{
AVIFileOpen(&pFile,szFileName,OF_WRITE|OF_CREATE,NULL);
memset(&strhdr,0,sizeof(strhdr));
strhdr.fccHandler=0;
strhdr.dwScale = 1;
strhdr.dwRate = 15;
strhdr.dwSuggestedBufferSize = bmpInfoHdr.biSizeImage;
SetRect(&strhdr.rcFrame,0,0,bmpInfoHdr.biWidth,bmpInfoHdr.biHeight);
AVIFileCreateStream(pFile,&ps,&strhdr);
AVIStreamSetFormat(ps,0,&bmpInfoHdr,sizeof(BITMAPINFOHEADER));
}
BYTE * buffer = new BYTE[bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3];
fread(buffer,1,bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3,pf);
AVIStreamSetFormat(ps,nframes,&bmpInfoHdr,sizeof(BITMAPINFOHEADER));
AVIStreamWrite(ps,nframes,1,(LPBYTE)buffer,bmpInfoHdr.biSizeImage,AVIIF_KEYFRAME,NULL,NULL);
nframes++;
fclose(pf);
delete[]buffer;
}
}
AVIStreamClose(ps);
if (pFile!=NULL)
AVIFileRelease(pFile);
AVIFileExit();
}
运行结果,avi文件无效的。
Eleven 2010-09-30
  • 打赏
  • 举报
回复
CyberLogix 2010-09-30
  • 打赏
  • 举报
回复
使用开源工程AVIdemux吧,很强大

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧