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為什麼需要首先進行初始化的原因。