文档似乎模棱两可。他们是否意味着如果图像内容的每个像素都相同,即使图像具有不同的编码,它也会返回 true?当他们说“不同的格式”时,他们是什么意思 - 如果只是格式不同,但宽度/高度相同,并且像素具有相同的 ARGB 值呢?
来自documentation :
bool QImage::operator== ( const QImage & image ) const
Returns true if this image and the given image have the same contents; otherwise returns false. The comparison can be slow, unless there is some obvious difference (e.g. different size or format), in which case the function will return quickly.
最佳答案
它们意味着首先要检查的是大小和格式,如果它们不同,函数会立即返回 false
,因为很明显图像不同 - 这就是函数将快速返回,因为不会比较任何像素,这是花费最多时间的像素比较。他们很清楚大小或格式必须不同才能使函数“快速”返回(即立即知道图像不同)。
除了格式之外,两幅图像不可能具有相同的 ARGB 值,因为它是定义像素值的格式 - 许多格式没有“A” channel ,有些格式颠倒了顺序 channel 数(例如 RGBA);有些格式根本没有任何接近 ARGB 的东西(例如 Format_Mono)。看看文档中的 enum QImage::Format
,您就会明白这一点。
具有不同格式的图片具有不同的内存大小和完全不同的像素值,您甚至无法以任何方式进行比较(因为没有标准的方法来比较例如 24 位像素和 16 位像素,即使它们都是 RGB);它们也不能看起来完全一样——这就是为什么人们发明了这么多不同的格式来满足不同的需求。格式定义了像素具有特定值的含义,因此它也决定了外观。
所以,简单总结一下:如果两张图片的尺寸或格式不同,在这个阶段你已经可以说这些图片没有相同的内容,所以就足够了== 运算符返回 false 的信息。
关于c++ - QImage::operator== 可以为具有相同内容的图像返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722699/