libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。Libjpeg不仅可以把bmp格式转化成jpg格式,还支持其他格式的转化成jpg格式(例如ppm,gif,targa,rle等)。
转化流程如下:
(1) 分配和初始化一个JPEG压缩对象
在libjpeg中,JPEG压缩对象被定义为“struct jpeg_compress_struct”(这个结构体内部有一些子结构体,这些子结构体时通过“malloc”来分配空间的,我们的程序不会直接使用这些结构体)。
我们还需要定于错误处理器。这里我们仅使用默认的错误处理器,默认的错误处理器会把警告/错误信息输出到stderr,如果出现致命错误,将会调用exit()退出程序。
绑定错误处理器的代码如下:
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
...
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
jpeg_create_compress会分配一小段内存,如果我们机器内存过少则会分配失败。在这种情况下error handler会处理错误并退出程序。这就是为什么error handler为什么需要首先进行初始化的原因。