【问题标题】:How to print all the raw data of QImage for comparisons in the memory?如何打印 QImage 的所有原始数据以在内存中进行比较?
【发布时间】:2013-08-19 12:29:06
【问题描述】:

我有两个应该相等的 QImage 对象,但 QImage::operator== 的结果是 false。所以我想打印两个对象的所有原始数据进行比较。怎么做?用qDebug()能做到吗?

【问题讨论】:

  • 我建议您将图像保存到磁盘并进行比较

标签: c++ qt qimage qdebug


【解决方案1】:

我建议你编写一个函数来逐字节比较两个图像,并返回它们不同的偏移量。

手动比较图像数据通常很乏味,并且可能会导致错误。

【讨论】:

  • 感谢您的建议:)
【解决方案2】:

如果您想打印每个像素的值,则使用 QImage 的 bits() 方法获取指向 unsigned char 中所有像素值的指针,然后在 for 循环中打印它们。例如,如果您有 32 位图片,那么在 bits() 返回的表中,每个像素(红色、绿色、蓝色、Alpha)将有 4 个值,并且要知道其中有多少您只使用了 width()*height ()*4(如果是 32 位深度)。或者您可以比较每个像素而不是打印,只返回不同的像素。

【讨论】:

  • 除了用来比较的像素值什么都没有?我检查了source,但不确定。
【解决方案3】:

使用qDebug() << QImage() 将打印出类似QImage(QSize(0, 0) ) 的内容。

您可以使用const uchar * QImage::constBits() 函数获取指向第一个像素数据的指针,然后遍历像素数据,打印值。

【讨论】:

  • 除了用来比较的像素值什么都没有?我检查了source,但不确定。
  • 我认为它首先比较所有信息,如图片格式,然后只有在匹配时才会检查像素。如果它运行得很快,则意味着它没有检查像素:)。
猜你喜欢
  • 2017-12-02
  • 1970-01-01
  • 2023-03-21
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多