From 85e621e3ecf449bb0587bd4da97ca66179b24f31 Mon Sep 17 00:00:00 2001 From: aavit Date: Tue, 1 Jul 2014 11:06:01 +0200 Subject: 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 --- 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 13bb9aa..d5c8793 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 eb25849..d41ea25 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("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 128a38d..c8f1bc0 100644 --- a/tests/shared/images/dds.qrc +++ b/tests/shared/images/dds.qrc @@ -49,5 +49,6 @@ dds/YUY2.dds dds/RXGB.dds dds/ATI2.dds + dds/A8R8G8B8_2.dds diff --git a/tests/shared/images/dds/A8R8G8B8_2.dds b/tests/shared/images/dds/A8R8G8B8_2.dds new file mode 100644 index 0000000..19fe92c Binary files /dev/null and b/tests/shared/images/dds/A8R8G8B8_2.dds differ -- cgit v1.2.3