diff options
Diffstat (limited to 'tests/auto/gui')
-rw-r--r-- | tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp index 0c8536d385..913fe55364 100644 --- a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp +++ b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp @@ -61,6 +61,8 @@ private slots: void imageConversion(); void imageConversion64_data(); void imageConversion64(); + void imageConversion64PM_data(); + void imageConversion64PM(); void imageConversionOverLargerGamut_data(); void imageConversionOverLargerGamut(); @@ -353,6 +355,76 @@ void tst_QColorSpace::imageConversion64() } } +void tst_QColorSpace::imageConversion64PM_data() +{ + imageConversion64_data(); +} + +void tst_QColorSpace::imageConversion64PM() +{ + QFETCH(QColorSpace::NamedColorSpace, fromColorSpace); + QFETCH(QColorSpace::NamedColorSpace, toColorSpace); + + QImage testImage(256, 16, QImage::Format_RGBA64_Premultiplied); + + for (int j = 0; j < 16; ++j) { + int a = j * 15; + for (int i = 0; i < 256; ++i) + testImage.setPixel(i, j, qPremultiply(qRgba(i, i, i, a))); + } + + testImage.setColorSpace(fromColorSpace); + QCOMPARE(testImage.colorSpace(), QColorSpace(fromColorSpace)); + + testImage.convertToColorSpace(toColorSpace); + QCOMPARE(testImage.colorSpace(), QColorSpace(toColorSpace)); + + int lastRed = 0; + int lastGreen = 0; + int lastBlue = 0; + for (int j = 0; j < 16; ++j) { + for (int i = 0; i < 256; ++i) { + QRgb p = testImage.pixel(i, j); + QVERIFY(qRed(p) >= lastRed); + QVERIFY(qGreen(p) >= lastGreen); + QVERIFY(qBlue(p) >= lastBlue); + QCOMPARE(qAlpha(p), j * 15); + lastRed = qRed(p); + lastGreen = qGreen(p); + lastBlue = qBlue(p); + } + QVERIFY(lastRed <= j * 15); + QVERIFY(lastGreen <= j * 15); + QVERIFY(lastBlue <= j * 15); + lastRed = 0; + lastGreen = 0; + lastBlue = 0; + } + + testImage.convertToColorSpace(fromColorSpace); + QCOMPARE(testImage.colorSpace(), QColorSpace(fromColorSpace)); + for (int j = 0; j < 16; ++j) { + for (int i = 0; i < 256; ++i) { + QRgb p = testImage.pixel(i, j); + QCOMPARE(qRed(p), qGreen(p)); + QCOMPARE(qRed(p), qBlue(p)); + QCOMPARE(qAlpha(p), j * 15); + QVERIFY((lastRed - qRed(p)) <= 0); + QVERIFY((lastGreen - qGreen(p)) <= 0); + QVERIFY((lastBlue - qBlue(p)) <= 0); + lastRed = qRed(p); + lastGreen = qGreen(p); + lastBlue = qBlue(p); + } + QVERIFY(lastRed <= j * 15); + QVERIFY(lastGreen <= j * 15); + QVERIFY(lastBlue <= j * 15); + lastRed = 0; + lastGreen = 0; + lastBlue = 0; + } +} + void tst_QColorSpace::imageConversionOverLargerGamut_data() { QTest::addColumn<QColorSpace::NamedColorSpace>("fromColorSpace"); |