如果可能的话,使用 libjpeg,我想从 JPEG 图像的中间读取一行,而不读取前面的所有行。这可以做到吗?
问问题
785 次
1 回答
2
答案几乎可以肯定是“是的,你可以,但它需要比你想要的更多的努力”。
JPEG 图像是一个标记流,其中包含整个压缩图像的全局信息或与图像特定部分相关的信息。压缩通过将图像分解为颜色平面来工作,可能将颜色空间更改为可以对颜色信息进行下采样的颜色空间,并且在每个平面内对 8x8 像素块进行操作。
例如,可以将压缩图像旋转 90 度,如果它的大小使得它只由整个块组成,只需将基本块和每个块内的系数转置即可;即无需解压缩、旋转真实图像和重新压缩。
鉴于此,您的方法是在进入库的过程中解析标记流,传递图像的所有全局标记,修改与图像大小相关的任何标记,并删除包含位于裁剪矩形之外的系数的标记。
如果对完成基本块的裁剪限制太粗糙,您可能需要进一步裁剪结果。
我不清楚的是是否有任何真正战胜替代方案的方法,即在结果从库中出来时对其进行裁剪。该库是高度可配置的,因此您可以提供一个未压缩的数据消费者函数,该函数会丢弃裁剪矩形之外的所有像素,只保存您想要保留的像素。
于 2010-09-10T00:59:46.773 回答