我正在使用libjpeg创建jpeg
但是,只有将3分量rba图像传递给它,它才能起作用。如果我尝试传递1分量灰度图像,则它不起作用。具体来说,这可行:
bundle exec rake db:migrate
但是这不起作用:
#define COLOR_COMPONENTS (3)
#define COLOR_SPACE (JCS_RGB)
JSAMPLE image_buffer[WIDTH*HEIGHT *3] =
{
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
};
...
// inside libjpeg I set the values
cinfo.image_width = image_width; /* image width and height, in pixels */
cinfo.image_height = image_height;
cinfo.input_components = COLOR_COMPONENTS; /* # of color components per pixel */
cinfo.in_color_space = COLOR_SPACE; /* colorspace of input image */
/* Now use the library's routine to set default compression parameters.
* (You must set at least cinfo.in_color_space before calling this,
* since the defaults depend on the source color space.)
*/
jpeg_set_defaults(&cinfo);
我可以使用libjpeg编码8位图像吗?以下代码的正确设置是什么?
#define COLOR_COMPONENTS (1)
#define COLOR_SPACE (JCS_GRAYSCALE)
JSAMPLE image_buffer[WIDTH*HEIGHT * 1] =
{
0x80, 0x80, 0x80, 0x80,
0x80, 0x00, 0x00, 0x80,
0x80, 0x00, 0x00, 0x80,
0x80, 0x80, 0x80, 0x80,
};
该代码需要在低时钟CPU上运行。因此,我没有多余的时间可以从灰度图像转换为RGB。
谢谢!
答案 0 :(得分:0)
没关系,我发现了问题所在。行跨度需要匹配色彩空间。
原始资料来源:
row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */
我只是将row_stride更改为1,因为它是每像素1字节的灰度级
row_stride = image_width * 1; /* JSAMPLEs per row in image_buffer */
在所有情况下都感谢您阅读