c语言jcs函数 c语言jmp( 二 )


站下载libjpeg的源码,IJG JPEG Library就是jpeg压缩库,是以源码的形式提供给软件开发人员的,当然在软件包里也有编译好的库文件 , 我们这里就只用到其中的 libjpeg.lib,jconfig.h,jmorecfg.h,jpeglib.h这几个文件 , 下面我就介绍一下怎样在自己的程序里嵌入图像压缩功 能 。
一、建立编译环境
所谓建立编译环境,其实非常简单,就是把上面提到的4个文件拷 贝到你的项目文件夹下,把libjpeg.lib添加到你的项目中,然后在你完成压缩功能的那个文件里加入#include "jpeglib.h",需要注意的是,libjpeg.lib是用c语言开发的 , 如果要用在你的C++程序里,需要用到extern "C",如下:
// TestLibjpeg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "memory.h"
extern "C" {
#include "jpeglib.h"
}
二、压缩步骤
1、申请并初始化jpeg压缩对象,同时要指定错误处理器
struct jpeg_compress_struct jcs;
// 声明错误处理器,并赋值给jcs.err域
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(jem);
jpeg_create_compress(jcs);
2、指定压缩后的图像所存放的目标文件,注意,目标文件应以二进制模式打开
f=fopen("03.jpg","wb");
if (f==NULL)
{
delete [] data;
delete [] pDataConv;
return 0;
}
jpeg_stdio_dest(jcs, f);
3、设置压缩参数 , 主要参数有图像宽、高、色彩通道数(1:索引图像,3:其他),色彩空间(JCS_GRAYSCALE表示灰度图,JCS_RGB表示彩色图像),压缩质量等,如下:
jcs.image_width = nWidth;// 为图的宽和高,单位为像素
jcs.image_height = nHeight;
jcs.input_components = 1;// 在此为1,表示灰度图,如果是彩色位图,则为3
jcs.in_color_space = JCS_GRAYSCALE; //JCS_GRAYSCALE表示灰度图,JCS_RGB表示彩色图像
jpeg_set_defaults(jcs);
jpeg_set_quality (jcs, 80, true);
需要注意的是,jpeg_set_defaults函数一定要等设 置好图像宽、高、色彩通道数计色彩空间四个参数后才能调用 , 因为这个函数要用到这四个值,调用jpeg_set_defaults函数后,jpeglib 库采用默认的设置对图像进行压缩,如果需要改变设置,如压缩质量,调用这个函数后,可以调用其它设置函数,如jpeg_set_quality函数 。其实 图像压缩时有好多参数可以设置 , 但大部分我们都用不着设置,只需调用jpeg_set_defaults函数值为默认值即可 。
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_scanlinejcs.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、声明并初始化解压缩对象 , 同时制定错误信息管理器

推荐阅读