我对 libjpeg 的jpeg_read_scanlines
工作方式感到困惑。据我了解,它逐行解压缩 JPEG,并创建解压缩的像素缓冲区。
典型用法如下:
jpeg_decompress_struct cinfo;
...
unsigned char* image = new unsigned char[cinfo.image_width * cinfo.image_height];
unsigned char* ptr = image;
int row_stride = cinfo.image_width;
while (cinfo.output_scanline < cinfo.image_height)
{
jpeg_read_scanlines(&cinfo, &ptr, 1);
ptr += row_stride;
}
问题:我对输出缓冲区大小感到困惑。在我看到的所有示例代码jpeg_read_scanlines
中,输出缓冲区的大小是width X height
,其中宽度和高度指的是 JPEG 文件的尺寸。因此,对于 10x10 JPEG 文件,我们将有一个 100 字节的输出缓冲区。
但是……每个 RGB 像素的大小不是3 个字节(24 位)吗?那么未压缩的数据实际上不应该是width X height X 3
字节吗?
为什么不是?
我注意到对于使用的代码,jpeg_write_scanlines
要压缩的缓冲区是 width X height X 3
。那么为什么只使用缓冲区jpeg_read_scanlines
呢width X height
?