把连续动态bmp转换为avi

把动态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");
}
时间: 2024-08-29 15:37:32

把连续动态bmp转换为avi的相关文章

python将list连续元素和非连续元素分开转换为指定字符串

python将list连续元素和非连续元素分开转换为指定字符串贴吧网友提问http://tieba.baidu.com/p/3730249293已知一个由纯数字(顺序由小按大排序)元素组成的列表,比如li=[1,2,3,4,5,7,8,15,20,21,22,23,24,28]写一个函数,让它返回如下的字符串str='1~5,7~8,15,20~24,28'若数字连续,中间部分用 ~ 省略. """黄哥python远程视频培训班https://github.com/pytho

最大连续动态和(LA_3938)

Sample Input 3 1 1 2 3 1 1 Sample Output Case 1: 1 1 线段树 L,R表示该区间的左右端点,sum表示该区间值的总和 l,r表示该区间连续的最大和的左右端点,maxall表示该区间的连续最大和 maxqj表示该区间的前缀连续最大和(即val[L]必取),qj表示该区间的前缀连续最大和右端点 maxhj表示该区间的后缀连续最大和(即val[R]必取),hj表示该区间的前缀连续最大和左端点 更新maxall:分3类讨论 1.连续最大和在左子树   或

24位位图bmp转换为字符

1 #include <cstdio> 2 #include <cstring> 3 #include <stdint.h> 4 #include <windows.h> 5 int32_t width,height; 6 RGBQUAD *pixels; 7 bool OpenBitmap(char const *filename) 8 { 9 FILE *file = fopen(filename, "rb"); 10 if (fil

jpg图片转换为avi视频

要用到视频序列,目前只有jpg图片,所以参考了一些网络资料,并做修改,转化测试成功. 程序: #include <stdlib.h> #include <stdio.h> #include <math.h> #include <cv.h> #include <highgui.h> #define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改 void Video_to_image(char* filename,const

Flink:动态表上的连续查询

用SQL分析数据流 越来越多的公司在采用流处理技术,并将现有的批处理应用程序迁移到流处理或者为新的应用设计流处理方案.其中许多应用程序专注于分析流数据.分析的数据流来源广泛,如数据库交易,点击,传感器测量或物联网设备. Apache Flink非常适合流式分析,因为它提供了事件时间语义支持,恰一次的处理,并同时实现了高吞吐和低延迟.由于这些特性,Flink能够近乎实时地从大量输入流计算确切的和确定性的结果,同时在出现故障时提供恰一次处理的语义. Flink的流处理核心API,DataStream

第十章 动态数组

当写下这个题目的时候,笔者心里其实非常犯难.因为从本质上来说,本章想阐述的内容与题目所宣示的概念,其实是不一样的.在编程中,我们常常要处理一段长度未知的数据,而且,运行过程中长度可能会发生变化,现行的C/C++标准没有提供在栈段和数据段内存中的实现,只提供堆中的实现,例如可以象下面代码那样在堆中分配一段内存,以处理一组长度不确定的整数: int *p = ( int* )malloc( n * sizeof( int ) ); 现在我们常常将这段堆内存称为“动态数组”.这正确吗?数组是一个高层概

腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

本文来自腾讯前端开发工程师" wendygogogo"的技术分享,作者自评:"在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦." 1.GIF格式的历史 GIF ( Graphics Interchange Format )原义是"图像互换格式",是 CompuServe 公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了. GIF 格式可以存储多幅彩色图像,如果将这些图像((https://www.q

动态url、静态url和伪静态url的详细讲解

关于url的动态.静态.伪静态,很多站长朋友,尤其是新站长一直搞不清楚.网上的许多解释又语焉不详,下面子画SEO就作详细的讲解下. 我们说url的动态.静态.伪静态三种形式,其实从严格分类上来说,伪静态也是动态的一种,只是表现形式为静态. 动态页面的特征: 1.以ASP.PHP.JSP.ASP.net.Perl.或CGI等编程语言制作的: 2.不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页: 3.内容存在于数据库中,根据用户发出的不同请求,其提供个性化的网页内容:

《具身认知》听书笔记

具身认知是在反对传统认知科学之偏误的基础上出现的.在传统的认知科学中,人的心智遭以简化为对自然.世界的准确镜像,认知活动在于摒弃.剔除身体的生理参与及经验的嵌入.具身认知真正把人视作“整全的人”,主张认知是大脑.身体与环境交互作用的产物,强调人的身心整全意义上的发展.它强调“具身性”与“情境化”,将对认知的认识从个体加工机制的探讨转向社会实践活动的分析:并认为认知结构具有时间属性,某一时刻的认知状态只是连续动态变化中的一个即时状态,因此主张把实验法和自然法融通起来,在真实.自然的情境中对认知过程