对于具有相同内容的图像,QImage :: operator ==可以返回false

时间:2014-07-13 12:28:08

标签: c++ qt qimage

文档似乎含糊不清。如果图像内容的每个像素相同,即使图像具有不同的编码,它们是否意味着它返回true?当他们说'#34;不同的格式" - 如果格式不同但宽度/高度相同,且像素具有相同的ARGB值会怎么样?

来自documentation

  

bool QImage :: operator ==(const QImage& image)const

     

如果此图像与给定图像具有相同内容,则返回true;   否则返回false。比较可能很慢,除非有   在这种情况下,一些明显的差异(例如,不同的大小或格式)   该功能将快速返回。

1 个答案:

答案 0 :(得分:1)

它们意味着检查的第一件事是大小和格式,如果它们不同,函数会立即返回false,因为很明显图像是不同的 - 这就是函数的原因将会快速返回,因为不会比较像素,这就是占用时间最多的像素比较。很明显,尺寸OR格式必须不同才能使功能快速返回。 (即立即知道图像不同)。

除了格式之外,两个图像具有相同的ARGB值是不可能的,因为它是定义像素值的格式 - 许多格式不具有'甲'通道,一些格式反转通道的顺序(例如RGBA);有些格式根本没有任何接近ARGB的格式(例如Format_Mono)。看看文档中的enum QImage::Format,您就会明白这一点。

具有不同格式的图片具有不同的内存大小和完全不同的像素值,您甚至无法以任何方式进行比较(因为没有标准的方法来比较例如24位像素和16位像素,即使它们都是RGB);它们也看起来不一样 - 这就是为什么人们发明了这么多不同的格式以满足不同的需求。格式定义了像素具有特定值的含义,因此它也决定了外观。

所以,简要总结一下:如果两个图像的尺寸或格式不同,你可以在这个阶段说这些图像不具有相同的内容,所以它是否足以让==运算符返回false。