您的位置:逆风者 VC++ 正文
 添加时间:2007-10-22 原文发表:2007-10-22 人气:568 来源:vckbase.com

本文章共2753字,分2页,当前第2页,快速翻页:
 

  4、上面的工作准备完成后,就可以压缩了,压缩过程非常简单,首先调用jpeg_start_compress,然后可以对每一行进行压缩,也可以对若干行进行压缩,甚至可以对整个的图像进行一次压缩,压缩完成后,记得要调用jpeg_finish_compress函数,如下:

逆风者
	jpeg_start_compress(&jcs, TRUE);

 	JSAMPROW row_pointer[1];   // 一行位图
 	int row_stride;      // 每一行的字节数 

	 row_stride = jcs.image_width;  // 如果不是索引图,此处需要乘以3

 	// 对每一行进行压缩
 	while (jcs.next_scanline < jcs.image_height) {
     		row_pointer[0] = & pDataConv[jcs.next_scanline * row_stride];
     		jpeg_write_scanlines(&jcs, row_pointer, 1);
 	}

 	jpeg_finish_compress(&jcs);
5、最后就是释放压缩工作过程中所申请的资源了,主要就是jpeg压缩对象,由于在本例中我是直接用的局部变量,所以只需调用jpeg_destroy_compress这个函数即可,如下:
jpeg_destroy_compress(&jcs);
三、解压缩步骤

  解压缩步骤与压缩步骤非常相似,只是解压缩对象为jpeg_decompress_struct类型,步骤如下:
  1、声明并初始化解压缩对象,同时制定错误信息管理器
	struct jpeg_decompress_struct cinfo;
	struct jpeg_error_mgr jerr;

	cinfo.err = jpeg_std_error(&jerr);
	jpeg_create_decompress(&cinfo);
  2、打开jpg图像文件,并指定为解压缩对象的源文件
	FILE *f = fopen(strSourceFileName,"rb");
	if (f==NULL)
	{
		printf("Open file error!\n");
		return;
	}
	// 
	jpeg_stdio_src(&cinfo, f);
  3、读取图像信息
   jpeg_read_header(&cinfo, TRUE);
  4、根据图像信息申请一个图像缓冲区
   data = new BYTE cinfo.image_width*cinfo.image_height*cinfo.num_components];
  5、开始解压缩
	jpeg_start_decompress(&cinfo);

	JSAMPROW row_pointer[1];
	while (cinfo.output_scanline < cinfo.output_height)
	{
		row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline-1)*cinfo.image_width*cinfo.num_components];
		jpeg_read_scanlines(&cinfo,row_pointer ,
					1);
	}
	jpeg_finish_decompress(&cinfo);
  6、释放资源
  jpeg_destroy_decompress(&cinfo);

	fclose(f);
  好了,利用IJG JPEG Library进行图像压缩就介绍到这里,希望对大家有所帮助,实例代码已经实现了图像的压缩和解压缩的全部功能,命令格式为:“TestLibjpeg.exe j|j24|b 源文件名 目标文件名”,其中,j选项将源文件压缩为jpg格式,不改变色彩模式,j24选项将源文件压缩为24为jpg格式,b选项将源文件解压缩为bmp格式,该实例并没有提供文件有效性的验证,如果要引入自己的代码,请自己实现文件有效性的验证。
 
本文章更多内容<<上一页 - 1 - 2
相关文章

用递归的方法画分形图
MFC中基于对话框程序快捷键的实现
让你的软件界面更漂亮(五)
BMP图象解析
VC实用小知识总结 (二)
VC实用小知识总结 (一)
超强仿QQ自动伸缩窗口
WIN32程序挂钩SetLastError,输出错误描述到
Spy++原理初探
汉诺塔游戏的设计
软件框架的利器、TangramMini组件应用教程六
让你的软件界面更漂亮(六)-- 仿QQ主界面之L
对OpenCV中的平面划分相关函数使用探索
探讨性能测试中的计时问题
用命令模式实现对象存储——对象与关系数据
DynamicLayout-VC 6.0对话框动态布局解决方
文件过滤系统驱动开发Filemon学习笔记
I2C通信
简单录、放音并保存为wav文件程序
动态创建控件支持事件响应并可保存与读取

相关评论


本文章所属分类:首页 VC++

  热门关键字: