gpt4 book ai didi

c++ - libjpeg:解压缩和裁剪

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:53:56 26 4
gpt4 key购买 nike

我有下一个基于 libjpeg 的 JPEG 图像解压缩标准代码。

jpeg_decompress_struct cinfo;
// ...Set error manager and data source...
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
while (cinfo.output_scanline < cinfo.output_height) {
JSAMPLE* scanlines[1];
// ...Set target pointer for scanline...
jpeg_read_scanlines(&cinfo, scanlines, 1);
}
jpeg_destroy_decompress(&cinfo);

我想读取被矩形裁剪的图像的一部分:

// struct RECT {
// int left;
// int top;
// int right;
// int bottom;
// };
RECT cropRect; // Coordinates of the crop rectangle relative to the output image size

我应该在下面的代码中修改什么来告诉 libjpeg 立即裁剪图像?

我是这样实现的:

  1. 忽略第一个 top - 1 行;
  2. 对于接下来的每一行 bottom - top 行:1)读取扫描线到临时缓冲区;2) 将列范围 [left, right) 中的像素从临时缓冲区复制到目标缓冲区。
  3. 中止解压。

但是这段代码是多余的。

最佳答案

在性能方面,特别是如果原始图像是高分辨率的并且您需要它的相对较小的一部分,您也许应该首先 crop/trim the image losslessly without decompressing it ,这在 16x16 像素(8x8?)粒度和速度下是可能的,然后解压缩,只跳过边缘的几行和像素。您可能还喜欢这种方法,因为操作使用的内存量较小。

如果您只是裁剪一点,那么开始完全解压缩的最初计划可能是最好的。这里几乎没有冗余。

关于c++ - libjpeg:解压缩和裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712819/

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