我使用来自Independent JPEG Group的 jpeg 库 v8d ,我想改变 jpeg 解压缩读取和处理数据的方式。
在 djpeg中,每次调用main()
中一次只读取和处理一个扫描线/行。jpeg_read_scanlines()
因此,要读取整个图像,将调用此函数,直到读取并处理所有行:
while (cinfo.output_scanline < cinfo.output_height) {
num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
dest_mgr->buffer_height); //read and process
(*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines); //write to file
}
但是我想读取整个图像一次并将其存储在内存中,然后从内存中处理整个图像。通过阅读libjpeg.txt
,我发现这是可能的:“如果您将整个图像都保存在内存中,您可以一次调用处理整个图像,但通常一次处理一条扫描线是最简单的。”
尽管我取得了一些进展,但我无法让它完全发挥作用。pub.buffer_height
我现在可以通过增加value 和size来读取几行pub.buffer
,但无论多大pub.buffer_height
,每次调用pub.buffer
只读取几行。jpeg_read_scanlines()
对此有什么想法吗?