(2) 指定压缩数据保存的位置
Libjpeg库把压缩后的数据传输到“数据目的”模块。在本库中包含把数据写入到标准流的“数据目的”模块。如果想把数据写入到其他地方(比如内存),可以自定义“数据目的”模块。以下是示例代码:
FILE * outfile;
...
if ((outfile = fopen(filename, "wb")) == NULL) {
writeLog(…);
}
jpeg_stdio_dest(&cinfo, outfile);
最后一个函数调用了标准“数据目的”模块。
可以选择在设置参数(步骤3)后再数据目的,但不能在jpeg_start_compress()和jpeg_finish_compress()之间更改数据目的。
(3) 设置压缩对象的参数
我们必须在JPEG压缩对象中设置源图片的以下信息:
image_width 图片的宽度,以像素为单位
image_height 图片的高度,以像素为单位
input_components 色彩通道数(每像素采样)
in_color_space 源文件的色彩空间
input_components为1代表灰度图,在等于3时代表彩色位图图像
in_color_space为JCS_GRAYSCALE表示灰度图,在等于JCS_RGB时代表彩色位图图像
JPEG需要提供大量的参数来决定我们如何对参数进行编码。大多数情况下我们不需要知道所有的参数,我们可以使用jpeg_set_defaults()把参数设置成合理的默认值。然后,再设置我们需要更改的参数。