3
我们使用IJG libjpeg库的8d版本来从24位Windows位图(.bmp)文件创建JPEG图像。使用libjpeg/C++从文件中JPEG编码位图(BMP)图像
write_JPEG_file()正在使用没有任何修改从IJG的example.c功能,如出现此:http://code.google.com/p/sumatrapdf/source/browse/trunk/ext/libjpeg-turbo/example.c?r=2397
的执行步骤的顺序如下:
BITMAPFILEHEADER bfh;
BITMAPINFO bi;
BITMAPINFOHEADER *bih;
FILE *input;
int image_height;
int image_width;
fopen_s(&input, "image.bmp", "rb"); // Open existing file
// Read bitmap file header
fread_s(&bfh, sizeof(BITMAPFILEHEADER), 1, sizeof(BITMAPFILEHEADER), input);
// Read bitmap info header
fread_s(&bi, sizeof(BITMAPINFO), 1, sizeof(BITMAPINFO), input);
bih = &bi.bmiHeader;
image_height = bih->biHeight;
image_width = bih->biWidth;
int data_size = image_width * image_height * 3; // Compute image data size
// Allocate image buffer; this is the buffer write_JPEG_file() will use
JSAMPLE * image_buffer = (JSAMPLE *)malloc(data_size);
// Read image pixel data from file
fread_s(image_buffer, data_size, 1, data_size, input);
fclose(input);
write_JPEG_file("image.jpg", 100 /* quality */);
虽然一切正常,没有任何错误,产生的JPEG图像不具有与原始位图图像相同的颜色,例如,红色和蓝色交换,黄色和青色相同...
我们尝试使用fseek()来设置输入文件光标到bfh.bfOffBits,但颜色仍然关闭。
是否有任何其他步骤可能需要确保JPEG编码正确完成?
谢谢,马克。以下是BGR到RGB转换的示例:http://tipsandtricks.runicsoft.com/Cpp/BitmapTutorial.html – alexg