把连续动态bmp转换为avi

简介: <h1><strong>把动态bmp24转换为avi</strong></h1><p></p><pre code_snippet_id="511341" snippet_file_name="blog_20141107_1_4203" name="code" class="cpp">BYTE tmp_buf[1024*768*4];//生成avivoid BMPtoAVI(CStri

把动态bmp24转换为avi

BYTE tmp_buf[1024*768*4];
//生成avi
void BMPtoAVI(CString szAVIName, CString strBmpDir)
{
	CFileFind finder;
	strBmpDir += _T("\\*.bmp"); 
	AVIFileInit(); 
	AVISTREAMINFO strhdr;
	PAVIFILE pfile;
	PAVISTREAM ps; 
	int nFrames =0; 
	HRESULT hr; 

	BOOL bFind = finder.FindFile(strBmpDir);
	while(bFind)
	{
		bFind = finder.FindNextFile();
		if(!finder.IsDots() && !finder.IsDirectory())
		{
			CString str = finder.GetFilePath();//检索文件
			FILE *fp = fopen(str,"rb");
			BITMAPFILEHEADER bmpFileHdr;
			BITMAPINFOHEADER bmpInfoHdr;
			fseek( fp,0,SEEK_SET);
			fread(&bmpFileHdr,sizeof(BITMAPFILEHEADER),1, fp);
			fread(&bmpInfoHdr,sizeof(BITMAPINFOHEADER),1, fp);//读取文件头
		
			if(nFrames ==0 )
			{
				AVIFileOpen(&pfile,szAVIName,OF_WRITE | OF_CREATE,NULL);
				memset(&strhdr, 0, sizeof(strhdr));
				strhdr.fccType = streamtypeVIDEO;// stream type
				strhdr.fccHandler = 0;
				strhdr.dwScale = 1;
				strhdr.dwRate = 25; // 15 fps
				strhdr.dwSuggestedBufferSize = bmpInfoHdr.biSizeImage ;
				SetRect(&strhdr.rcFrame, 0, 0, bmpInfoHdr.biWidth, bmpInfoHdr.biHeight);		
								// And create the stream;
				hr = AVIFileCreateStream(pfile,&ps,&strhdr); 
								// hr = AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(bmpInfoHdr));
			}
		//	tmp_buf = new BYTE[bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 4];
			fread(tmp_buf, 1, bmpInfoHdr.biWidth * bmpInfoHdr.biHeight * 3, fp);//读取文件数据
			hr = AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(bmpInfoHdr));
			hr = AVIStreamWrite(ps, // stream pointer
				nFrames , // time of this frame
				1, // number to write
				(LPBYTE) tmp_buf,
				bmpInfoHdr.biSizeImage , // size of this frame
				AVIIF_KEYFRAME, // flags....
			NULL,
			NULL);
			nFrames ++; 
			
			fclose(fp);

		}
	}
	AVIStreamClose(ps);
	if(pfile != NULL)
	AVIFileRelease(pfile);
	AVIFileExit();

}
void CTestaviDlg::OnButton2() 
{
	BMPtoAVI("f:\\ffoutput\\1.avi","f:\\ffoutput\\pic\\");
        MessageBox("over");
}


相关文章
|
5月前
|
存储 编解码 API
如何通过编程获取桌面分辨率、操作像素点颜色、保存位图和JPG格式图片,以及图片数据的处理和存储方式
如何通过编程获取桌面分辨率、操作像素点颜色、保存位图和JPG格式图片,以及图片数据的处理和存储方式
87 0
|
6月前
|
存储 传感器 编解码
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
1239 1
|
6月前
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
220 0
|
存储 索引 Windows
bmp位图格式详细介绍-1/4/8/16/24/32bit、存储格式等
bmp位图格式详细介绍-1/4/8/16/24/32bit、存储格式等
1636 1
bmp位图格式详细介绍-1/4/8/16/24/32bit、存储格式等
|
存储 前端开发 应用服务中间件
动态转换图片格式为webp
动态转换图片格式为webp
动态转换图片格式为webp
将RGB转换为JPG格式到内存的代码
将RGB转换为JPG格式到内存的代码
158 0
|
C++
CxImage内存方式转换图像
最近,处于项目需要,需要将Bmp转换为JPEG格式。以前做过,采用的是GDI+的方式,该方式有一个极大地缺陷为无法实现跨平台处理。闲话少说,进入正题。 [cpp] view plain copy   CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);      cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);   该方式很正常,顺利将RGB格式24位BMP图像转化为本地JPG文件并保存下来。
1206 0
|
编解码 Windows
R中输出常见位图和矢量图格式总结
R语言有两大主要功能,绘图和统计,R的绘图功能是很强大的,在R里绘制好图形后常常需要输出图形。 图形常见的格式有位图和矢量图,位图又包括TIFF、BMP、JPEG、PNG等;矢量图包括PDF、VMF、SVG等。 今天就来学习R中怎么导出常见的位图和矢量图形。
1895 0
R中输出常见位图和矢量图格式总结
|
内存技术
【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )(一)
【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )(一)
412 0
【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )(一)
|
内存技术
【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )(二)
【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )(二)
192 0
【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )(二)