使用QImage减少加载和保存图像?

时间:2013-11-04 16:41:28

标签: qt

将图像文件加载到QImage然后重新保存时,是否可能会丢失数据?或者在没有任何转换/编辑的情况下它是否会丢失?

2 个答案:

答案 0 :(得分:3)

我希望这取决于格式。例如,JPEG是一种压缩算法,然后将其解压缩到QImage中。再次保存可能不会在此处创建无损图像,尤其是可以更改压缩程度。

但是,如果使用原始图像格式,例如png,则在将图像保存并重新读入QImage时,数据可能会相同。

答案 1 :(得分:1)

一切都取决于你无偿的意思。如果图像文件格式是无损的(例如,PNG),则磁盘 - > QImage->磁盘往返仅保证图像位图的持久性。非图像数据(属性等)将不会被保留。

如果图像格式无损(例如,JPEG),那么往返实际上会降低图像的质量。

您需要考虑QImage需要做什么才能支持位图的无损往返。它不仅需要存储解码的图像位图,还需要存储源文件的内容。一旦对图像进行任何修改,就需要丢弃后者。它没有实现,因为过早的悲观化可能会使QImage的内存使用量翻倍。

你可以自由地实现QImage - 看起来像你想要的那样。请注意,您应该正确支持写时复制语义,并且您的内部图像文件数据必须保存在QSharedData中并通过QSharedDataPointer访问。您需要在所有非const方法中强制detach这些数据。