我想在我的OpenGL应用程序上运行一些单元测试。这导致我过去的一些问题(OpenGL draw difference between 2 computers),但现在我知道我能做什么,不能做什么。
这是我为检查渲染而编写的一个小测试:
QImage display(grabFrameBuffer());
QImage wanted(PATH_TO_RESSOURCES + "/file_010.bmp");
int Qimage_width = display.width();
int Qimage_height = display.height();
for(int i = 1; i < Qimage_width; i++) {
for(int j = 1; j < Qimage_height; j++) {
if(QColor(display.pixel(i, j)).name() != QColor(wanted.pixel(i, j)).name()) {
qDebug() << "different pixel detected" << i << j;
}
}
}
QVERIFY(wanted == display);
QVERIFY()失败,但永远不会显示消息"different pixel detected" << i << j
。
如果我用Photoshop比较文件(参见photo.stackexchange),我找不到任何不同的像素。我有点失落。
编辑:我正在使用Qt 5.2,如果我在file_010.bmp上手动更改一个像素,则会显示错误消息"different pixel detected" << i << j
。
答案 0 :(得分:1)
如果图像具有不同的格式,不同的大小和/或不同的内容,QImage
相等运算符将报告两个QImage
实例是不同的。为了让其他人可能无法理解为什么两个QImage
实例不同,下面的函数会打印出差异是什么(尽管如果有很多不同的像素,它可能会产生很多输出): / p>
void displayDifferencesInImages(const QImage& image1, const QImage& image2)
{
if (image1 == image2)
{
qDebug("Images are identical");
return;
}
qDebug("Found the following differences:");
if (image1.size() != image2.size())
{
qDebug(" - Image sizes are different (%dx%d vs. %dx%d)",
image1.width(), image1.height(),
image2.width(), image2.height());
}
if (image1.format() != image2.format())
{
qDebug(" - Image formats are different (%d vs. %d)",
static_cast<int>(image1.format()),
static_cast<int>(image2.format()));
}
int smallestWidth = qMin(image1.width(), image2.width());
int smallestHeight = qMin(image1.height(), image2.height());
for (int i=0; i<smallestWidth; ++i)
{
for (int j=0; j<smallestHeight; ++j)
{
if (image1.pixel(i, j) != image2.pixel(i, j))
{
qDebug(" - Image pixel (%d, %d) is different (%x vs. %x)",
i, j, image1.pixel(i, j), image2.pixel(i, j));
}
}
}
}