c++ - QImage::operator== 可以为具有相同内容的图像返回 false

标签 c++ qt qimage

文档似乎模棱两可。他们是否意味着如果图像内容的每个像素都相同,即使图像具有不同的编码,它也会返回 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/

相关文章:

c++ - Qt::QTableWidget:SIGNAL currentCellChanged:鼠标和键盘之间存在差异

c++ - 加载时移除 Qt Webkit 加载光标

c++ - Qimage setPixel with openmp parallel for 不起作用

qt - QT 中非常大的 QImage 和内存映射文件

c++ - Qimage:内存不足,返回空图像

c++ - 在 gdb 中,我可以调用一些类函数,但其​​他的 "cannot be resolved"。为什么?

C++,#include 问题!

c++ - 如何将 boost::asio::write 的缓冲区存储为shared_ptr?

c++ - 我可以在哪里定义 MFC 应用程序中的全局变量?

c++ - C++ 中的线程池/队列系统