我可以使用libjpeg读取特定的图像行吗?

时间:2010-09-09 20:41:20

标签: c jpeg libjpeg

使用libjpeg,如果可能的话,我想从JPEG图像的中间读取一行而不读取前面的所有行。可以这样做吗?

1 个答案:

答案 0 :(得分:2)

答案几乎可以肯定“是的,你可以,但需要的努力比你想要的多。”

JPEG图像是一种标记流,包含整个压缩图像的全局信息或与图像特定部分相关的信息。压缩的工作原理是将图像分成彩色平面,可能会将颜色空间更改为可以对颜色信息进行下采样的颜色空间,以及在8x8像素块上运行的每个平面内。

例如,如果将压缩图像的大小调整为仅通过仅转置基本块和每个块内的系数而仅由整个块组成,则可以将压缩图像旋转90度。即没有解压缩,旋转真实图像,并重新压缩。

鉴于此,您的方法是在进入库的路上解析标记流,将所有全局标记传递给图像,修改与图像大小相关的任何标记,并删除包含在裁剪之外的系数的标记矩形。

如果完成基本块的裁剪限制太粗糙,您可能需要进一步裁剪结果。

我不清楚的是,是否真的赢得了替代方案,即将结果从图书馆中删除。该库具有高度可配置性,因此您可以提供一个未压缩的数据使用者函数,该函数会丢弃裁剪矩形外的所有像素,并且只保存您想要保留的像素。