将图像文件加载到QImage然后重新保存时,是否可能会丢失数据?或者在没有任何转换/编辑的情况下它是否会丢失?
答案 0 :(得分:3)
我希望这取决于格式。例如,JPEG是一种压缩算法,然后将其解压缩到QImage中。再次保存可能不会在此处创建无损图像,尤其是可以更改压缩程度。
但是,如果使用原始图像格式,例如png,则在将图像保存并重新读入QImage时,数据可能会相同。
答案 1 :(得分:1)
一切都取决于你无偿的意思。如果图像文件格式是无损的(例如,PNG),则磁盘 - > QImage->磁盘往返仅保证图像位图的持久性。非图像数据(属性等)将不会被保留。
如果图像格式不无损(例如,JPEG),那么往返实际上会降低图像的质量。
您需要考虑QImage
需要做什么才能支持位图的无损往返。它不仅需要存储解码的图像位图,还需要存储源文件的内容。一旦对图像进行任何修改,就需要丢弃后者。它没有实现,因为过早的悲观化可能会使QImage
的内存使用量翻倍。
你可以自由地实现QImage
- 看起来像你想要的那样。请注意,您应该正确支持写时复制语义,并且您的内部图像文件数据必须保存在QSharedData
中并通过QSharedDataPointer
访问。您需要在所有非const方法中强制detach
这些数据。