From 85e621e3ecf449bb0587bd4da97ca66179b24f31 Mon Sep 17 00:00:00 2001 From: aavit <eirik.aavitsland@digia.com> Date: Tue, 1 Jul 2014 11:06:01 +0200 Subject: [PATCH] Fix DDS image writing The code did not correctly do the 90-degree rotation needed for DDS, and would fail on non-square images. Task-number: QTBUG-39899 Change-Id: I1599e3fe44ff7895db8aa6e325fa8fdba2106694 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com> --- src/plugins/imageformats/dds/qddshandler.cpp | 6 +++--- tests/auto/dds/tst_qdds.cpp | 2 ++ tests/shared/images/dds.qrc | 1 + tests/shared/images/dds/A8R8G8B8_2.dds | Bin 0 -> 8320 bytes 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 tests/shared/images/dds/A8R8G8B8_2.dds diff --git a/src/plugins/imageformats/dds/qddshandler.cpp b/src/plugins/imageformats/dds/qddshandler.cpp index 13bb9aaf..d5c8793e 100644 --- a/src/plugins/imageformats/dds/qddshandler.cpp +++ b/src/plugins/imageformats/dds/qddshandler.cpp @@ -1338,9 +1338,9 @@ bool QDDSHandler::write(const QImage &outImage) dds.pixelFormat.bBitMask = 0x000000ff; s << dds; - for (int width = 0; width < image.width(); width++) { - for (int height = 0; height < image.height(); height++) { - QRgb pixel = image.pixel(height, width);; + for (int height = 0; height < image.height(); height++) { + for (int width = 0; width < image.width(); width++) { + QRgb pixel = image.pixel(width, height); quint32 color; quint8 alpha = qAlpha(pixel); quint8 red = qRed(pixel); diff --git a/tests/auto/dds/tst_qdds.cpp b/tests/auto/dds/tst_qdds.cpp index eb258497..d41ea257 100644 --- a/tests/auto/dds/tst_qdds.cpp +++ b/tests/auto/dds/tst_qdds.cpp @@ -109,6 +109,7 @@ void tst_qdds::readImage_data() QTest::newRow("46") << QString("RXGB") << QSize(64, 64); QTest::newRow("47") << QString("ATI2") << QSize(64, 64); QTest::newRow("48") << QString("P4") << QSize(64, 64); + QTest::newRow("49") << QString("A8R8G8B8_2") << QSize(64, 32); } void tst_qdds::readImage() @@ -158,6 +159,7 @@ void tst_qdds::testWriteImage_data() QTest::addColumn<QSize>("size"); QTest::newRow("1") << QString("A8R8G8B8") << QSize(64, 64); + QTest::newRow("2") << QString("A8R8G8B8_2") << QSize(64, 32); } void tst_qdds::testWriteImage() diff --git a/tests/shared/images/dds.qrc b/tests/shared/images/dds.qrc index 128a38de..c8f1bc09 100644 --- a/tests/shared/images/dds.qrc +++ b/tests/shared/images/dds.qrc @@ -49,5 +49,6 @@ <file>dds/YUY2.dds</file> <file>dds/RXGB.dds</file> <file>dds/ATI2.dds</file> + <file>dds/A8R8G8B8_2.dds</file> </qresource> </RCC> diff --git a/tests/shared/images/dds/A8R8G8B8_2.dds b/tests/shared/images/dds/A8R8G8B8_2.dds new file mode 100644 index 0000000000000000000000000000000000000000..19fe92ca65e7e611d2d1aab5c3e747249a316c4c GIT binary patch literal 8320 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 literal 0 HcmV?d00001 -- GitLab