3

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

4

2 回答 2

3

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

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

于 2013-11-04T16:45:07.767 回答
1

一切都取决于您所说的无损。如果图像文件格式是无损的(比如 PNG),那么磁盘->QImage->磁盘往返只能保证图像位图的持久性。不会保留非图像数据(属性等)。

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

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

你可以自由地实现一个QImage-lookalike,它会按照你想要的方式运行。请注意,您应该正确支持写时复制语义,并且您的图像文件数据必须保存在内部QSharedData并通过QSharedDataPointer. 您需要detach在所有非常量方法中强制使用这些数据。

于 2013-12-24T22:23:57.223 回答