From d2306d74850986692c02b70df0d7a6a6e933d0dc Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Sun, 1 Jan 2017 23:49:35 +0100 Subject: Add support for multipage TIFF images to QTiffHandler Allows multipage TIFF images to be read via QImageReader::jumpToImage and QImageReader::jumpNextToImage. [ChangeLog][QtGui][QImageReader] Support multipage TIFF images through QImageReader Change-Id: Id6ac68b75500148e51be11eff3d296c929d2d95c Reviewed-by: Allan Sandfeld Jensen --- tests/auto/tiff/tst_qtiff.cpp | 44 ++++++++++++++++++++++++++++++++ tests/shared/images/tiff.qrc | 1 + tests/shared/images/tiff/multipage.tiff | Bin 0 -> 20238 bytes 3 files changed, 45 insertions(+) create mode 100644 tests/shared/images/tiff/multipage.tiff (limited to 'tests') diff --git a/tests/auto/tiff/tst_qtiff.cpp b/tests/auto/tiff/tst_qtiff.cpp index 8e3d0c9..65cc56c 100644 --- a/tests/auto/tiff/tst_qtiff.cpp +++ b/tests/auto/tiff/tst_qtiff.cpp @@ -78,6 +78,9 @@ private slots: void resolution_data(); void resolution(); + void multipage_data(); + void multipage(); + private: QString prefix; }; @@ -513,5 +516,46 @@ void tst_qtiff::resolution() QCOMPARE(expectedDotsPerMeterY, generatedImage.dotsPerMeterY()); } +void tst_qtiff::multipage_data() +{ + QTest::addColumn("filename"); + QTest::addColumn("expectedNumPages"); + QTest::addColumn>("expectedSizes"); + + QVector sizes = QVector() << QSize(640, 480) << QSize(800, 600) << QSize(320, 240); + QTest::newRow("3 page TIFF") << ("multipage.tiff") << 3 << sizes; +} + +void tst_qtiff::multipage() +{ + QFETCH(QString, filename); + QFETCH(int, expectedNumPages); + QFETCH(QVector, expectedSizes); + + QImageReader reader(prefix + filename); + QCOMPARE(reader.imageCount(), expectedNumPages); + + // Test jumpToImage, currentImageNumber and whether the actual image is correct + QCOMPARE(reader.jumpToImage(-1), false); + for (int i = 0; i < expectedNumPages; ++i) { + reader.jumpToImage(i); + QCOMPARE(reader.currentImageNumber(), i); + QSize size = reader.size(); + QCOMPARE(size.width(), expectedSizes[i].width()); + QCOMPARE(size.height(), expectedSizes[i].height()); + QImage image = reader.read(); + QVERIFY2(!image.isNull(), qPrintable(reader.errorString())); + } + QCOMPARE(reader.jumpToImage(expectedNumPages), false); + + // Test jumpToNextImage + reader.jumpToImage(0); + QCOMPARE(reader.currentImageNumber(), 0); + for (int i = 0; i < expectedNumPages - 1; ++i) { + QCOMPARE(reader.jumpToNextImage(), true); + } + QCOMPARE(reader.jumpToNextImage(), false); +} + QTEST_MAIN(tst_qtiff) #include "tst_qtiff.moc" diff --git a/tests/shared/images/tiff.qrc b/tests/shared/images/tiff.qrc index 8fcab8b..c98a72c 100644 --- a/tests/shared/images/tiff.qrc +++ b/tests/shared/images/tiff.qrc @@ -21,6 +21,7 @@ tiff/mono_orientation_6.tiff tiff/mono_orientation_7.tiff tiff/mono_orientation_8.tiff + tiff/multipage.tiff tiff/original_indexed.tiff tiff/original_mono.tiff tiff/original_rgb.tiff diff --git a/tests/shared/images/tiff/multipage.tiff b/tests/shared/images/tiff/multipage.tiff new file mode 100644 index 0000000..0c2f266 Binary files /dev/null and b/tests/shared/images/tiff/multipage.tiff differ -- cgit v1.2.1