Fix comparisons of image with different color spaces
Take color space into account when comparing images, and fix gamma comparison that was trying to be too accurate. Change-Id: I3674653abb21b66aaacb557addc4afb4ee75cfdd Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
parent
b6f7efba48
commit
733ca2230c
@ -3834,7 +3834,9 @@ bool QImage::operator==(const QImage & i) const
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// obviously different stuff?
|
// obviously different stuff?
|
||||||
if (i.d->height != d->height || i.d->width != d->width || i.d->format != d->format)
|
if (i.d->height != d->height || i.d->width != d->width)
|
||||||
|
return false;
|
||||||
|
if (i.d->format != d->format || i.d->colorSpace != d->colorSpace)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (d->format != Format_RGB32) {
|
if (d->format != Format_RGB32) {
|
||||||
|
@ -651,7 +651,7 @@ bool operator==(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2)
|
|||||||
if (colorSpace1.transferFunction() != colorSpace2.transferFunction())
|
if (colorSpace1.transferFunction() != colorSpace2.transferFunction())
|
||||||
return false;
|
return false;
|
||||||
if (colorSpace1.transferFunction() == QColorSpace::TransferFunction::Gamma)
|
if (colorSpace1.transferFunction() == QColorSpace::TransferFunction::Gamma)
|
||||||
return colorSpace1.gamma() == colorSpace2.gamma();
|
return (qAbs(colorSpace1.gamma() - colorSpace2.gamma()) <= (1.0f / 512.0f));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,6 +232,8 @@ private slots:
|
|||||||
|
|
||||||
void wideImage();
|
void wideImage();
|
||||||
|
|
||||||
|
void colorspaceEquality();
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||||
void toWinHBITMAP_data();
|
void toWinHBITMAP_data();
|
||||||
void toWinHBITMAP();
|
void toWinHBITMAP();
|
||||||
@ -3618,6 +3620,22 @@ void tst_QImage::wideImage()
|
|||||||
// Qt6: Test that it actually works on 64bit architectures.
|
// Qt6: Test that it actually works on 64bit architectures.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QImage::colorspaceEquality()
|
||||||
|
{
|
||||||
|
QImage image1(10, 10, QImage::Format_RGB32);
|
||||||
|
image1.fill(Qt::red);
|
||||||
|
QImage image2(image1);
|
||||||
|
QCOMPARE(image1, image2);
|
||||||
|
image1.setColorSpace(QColorSpace::SRgbLinear);
|
||||||
|
QVERIFY(image1 != image2);
|
||||||
|
image2.setColorSpace(QColorSpace::SRgbLinear);
|
||||||
|
QVERIFY(image1 == image2);
|
||||||
|
image1.setColorSpace(QColorSpace(QColorSpace::Gamut::DciP3D65, QColorSpace::TransferFunction::Gamma, 2.2f));
|
||||||
|
QVERIFY(image1 != image2);
|
||||||
|
image2.setColorSpace(QColorSpace(QColorSpace::Gamut::DciP3D65, QColorSpace::TransferFunction::Gamma, 2.2001f));
|
||||||
|
QVERIFY(image1 == image2);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
Q_GUI_EXPORT HBITMAP qt_imageToWinHBITMAP(const QImage &p, int hbitmapFormat = 0);
|
Q_GUI_EXPORT HBITMAP qt_imageToWinHBITMAP(const QImage &p, int hbitmapFormat = 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user