使用QImage加载和保存图像是否无损?

3

当我将一个图像文件加载到QImage中并重新保存时,是否会可能丢失数据?在没有任何转换/编辑的情况下,它是否是无损的?

2个回答

3
我希望这取决于格式。例如,JPEG 是一种压缩算法,然后被解压缩为 QImage。再次保存可能不会创建无损图像,特别是因为压缩程度可以更改。
但是,如果您使用原始图像格式,例如 png,那么在保存和重新读入图像返回 QImage 时,数据很可能是相同的。

1
一切都取决于您对无损的定义。如果图像文件格式是无损的(比如PNG),那么磁盘-> QImage-> 磁盘往返只能保证图像位图的持久性,非图像数据(属性等)将不会被保留。
如果图像格式不是无损的(比如JPEG),那么往返实际上会降低图像质量。
您需要考虑一下QImage需要做什么才能支持位图的无损往返。它需要存储解码后的图像位图以及源文件的内容。后者在对图像进行任何修改后需要被丢弃。这并没有被实现,因为这将是一种过早的恶化,可能会将 QImage 的内存使用量翻倍。
您可以自由地实现一个类似QImage的东西,使其按照您的要求运行。请注意,您应该正确支持写时复制语义,并且您的图像文件数据必须在 QSharedData 中保留并通过 QSharedDataPointer 访问。您需要在所有非const方法中强制分离此数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接