libjpeg RGB轉(zhuǎn)JPEG
原文
https://blog.csdn.net/qq_34035628/article/details/129227635
下載libjpeg 9b并解壓
libjpeg 9b
tar?-xzf??jpegsrc.v9b.tar.gz
進(jìn)如解壓好的文件夾 編譯
?./configure
?mkdir?build
?make?-j32
?make?install?DESTDIR=/XXX/build
拷貝include和lib文件夾到自己的工程 cmake引入
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
代碼如下
//?設(shè)置一個(gè)足夠大的buffer
char?jpeg[512*1024];
int??jpeg_size=512*1024;
rgb2jpeg(rgb_buffer,?width,?height,?channel,?jpeg,?&jpeg_size);
int?rgb2jpeg(const?char?*rgb_buffer,?int?width,?int?height,?int?depth,?char?*jpeg_buffer,?int?*size)
{
??jpeg.err?=?jpeg_std_error(&jerr);
??jpeg_create_compress(&jpeg);
??jpeg_mem_dest(&jpeg,?(unsigned?char?**)&jpeg_buffer,?(long?unsigned?int?*)size);
??JSAMPROW?row_pointer[1];
??jpeg.image_width?=?width;
??jpeg.image_height?=?height;
??jpeg.input_components?=?depth;
??jpeg.in_color_space?=?JCS_RGB;
??jpeg_set_defaults(&jpeg);
??jpeg_start_compress(&jpeg,?TRUE);
??int?row_stride?=?width?*?depth;
??while?(jpeg.next_scanline?<?jpeg.image_height)
??{
????row_pointer[0]?=?(JSAMPROW)(rgb_buffer?+?jpeg.next_scanline?*?row_stride);
????jpeg_write_scanlines(&jpeg,?row_pointer,?1);
??}
??jpeg_finish_compress(&jpeg);
??jpeg_destroy_compress(&jpeg);
??return?0;
}