gpt4 book ai didi

c - libjpeg:一次处理所有扫描线

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:23 26 4
gpt4 key购买 nike

我使用来自 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 值和 pub.buffer 大小一次读取几行,但无论 pub.buffer_height 有多大和 pub.buffer 是,在每个 jpeg_read_scanlines() 调用中只读取几行。对此有什么想法吗?

最佳答案

only a couple of lines are read in each jpeg_read_scanlines()

是的,所以你在循环中调用它。这是一次获取一条扫描线的循环:

unsigned char *rowp[1], *pixdata = ...;
unsigned rowbytes = ..., height = ...;

while (cinfo.output_scanline < height) {
rowp[0] = pixdata + cinfo.output_scanline * rowbytes;
jpeg_read_scanlines(&cinfo, rowp, 1);
}

一旦循环退出,您就拥有了整个图像。

关于c - libjpeg:一次处理所有扫描线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com