From 2842212e88afb200a0fcfda7d306c4e8eee26407 Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
Date: Thu, 21 Jun 2018 16:52:41 +0200
Subject: [PATCH] Add RGBA64 format support to TIFF plugin

TIFF is one of the primary formats for HDR images.

Change-Id: I5310b5c9a625fd3e759e5120be6ba547c633c81c
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
---
 .../imageformats/tiff/qtiffhandler.cpp        | 115 ++++++++++++++++--
 .../imageformats/tiff/qtiffhandler_p.h        |   1 +
 tests/auto/tiff/tst_qtiff.cpp                 |  17 +++
 tests/shared/images/tiff.qrc                  |   1 +
 tests/shared/images/tiff/16bpc.tiff           | Bin 0 -> 21414 bytes
 5 files changed, 122 insertions(+), 12 deletions(-)
 create mode 100644 tests/shared/images/tiff/16bpc.tiff

diff --git a/src/plugins/imageformats/tiff/qtiffhandler.cpp b/src/plugins/imageformats/tiff/qtiffhandler.cpp
index 84221d6f..1232b506 100644
--- a/src/plugins/imageformats/tiff/qtiffhandler.cpp
+++ b/src/plugins/imageformats/tiff/qtiffhandler.cpp
@@ -46,6 +46,8 @@ extern "C" {
 #include "tiffio.h"
 }
 
+#include <memory>
+
 QT_BEGIN_NAMESPACE
 
 tsize_t qtiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
@@ -273,7 +275,10 @@ bool QTiffHandlerPrivate::readHeaders(QIODevice *device)
     else if ((grayscale || photometric == PHOTOMETRIC_PALETTE) && bitPerSample == 8 && samplesPerPixel == 1)
         format = QImage::Format_Indexed8;
     else if (samplesPerPixel < 4)
-        format = QImage::Format_RGB32;
+        if (bitPerSample > 8 && photometric == PHOTOMETRIC_RGB)
+            format = QImage::Format_RGBX64;
+        else
+            format = QImage::Format_RGB32;
     else {
         uint16 count;
         uint16 *extrasamples;
@@ -281,11 +286,25 @@ bool QTiffHandlerPrivate::readHeaders(QIODevice *device)
         // data to us. If there is none, libtiff will not touch it and  we assume it to be
         // non-premultiplied, matching behavior of tested image editors, and how older Qt
         // versions used to save it.
+        bool premultiplied = true;
         bool gotField = TIFFGetField(tiff, TIFFTAG_EXTRASAMPLES, &count, &extrasamples);
         if (!gotField || !count || extrasamples[0] == EXTRASAMPLE_UNSPECIFIED)
-            format = QImage::Format_ARGB32;
-        else
-            format = QImage::Format_ARGB32_Premultiplied;
+            premultiplied = false;
+
+        if (bitPerSample > 8 && photometric == PHOTOMETRIC_RGB) {
+            // We read 64-bit raw, so unassoc remains unpremultiplied.
+            if (gotField && count && extrasamples[0] == EXTRASAMPLE_UNASSALPHA)
+                premultiplied = false;
+            if (premultiplied)
+                format = QImage::Format_RGBA64_Premultiplied;
+            else
+                format = QImage::Format_RGBA64;
+        } else {
+            if (premultiplied)
+                format = QImage::Format_ARGB32_Premultiplied;
+            else
+                format = QImage::Format_ARGB32;
+        }
     }
 
     headersRead = true;
@@ -321,10 +340,9 @@ bool QTiffHandler::read(QImage *image)
         return false;
 
     QImage::Format format = d->format;
-    if (format == QImage::Format_RGB32 &&
-            (image->format() == QImage::Format_ARGB32 ||
-             image->format() == QImage::Format_ARGB32_Premultiplied))
-        format = image->format();
+
+    if (image->size() == d->size && image->format() != format)
+        image->reinterpretAsFormat(format);
 
     if (image->size() != d->size || image->format() != format)
         *image = QImage(d->size, format);
@@ -338,7 +356,8 @@ bool QTiffHandler::read(QImage *image)
     const quint32 width = d->size.width();
     const quint32 height = d->size.height();
 
-    if (format == QImage::Format_Mono || format == QImage::Format_Indexed8 || format == QImage::Format_Grayscale8) {
+    // Setup color tables
+    if (format == QImage::Format_Mono || format == QImage::Format_Indexed8) {
         if (format == QImage::Format_Mono) {
             QVector<QRgb> colortable(2);
             if (d->photometric == PHOTOMETRIC_MINISBLACK) {
@@ -381,7 +400,14 @@ bool QTiffHandler::read(QImage *image)
             image->setColorTable(qtColorTable);
             // free redTable, greenTable and greenTable done by libtiff
         }
+    }
+    bool format8bit = (format == QImage::Format_Mono || format == QImage::Format_Indexed8 || format == QImage::Format_Grayscale8);
+    bool format64bit = (format == QImage::Format_RGBX64 || format == QImage::Format_RGBA64 || format == QImage::Format_RGBA64_Premultiplied);
 
+    if (format8bit || format64bit) {
+        int bytesPerPixel = image->depth() / 8;
+        if (format == QImage::Format_RGBX64)
+            bytesPerPixel = 6;
         if (TIFFIsTiled(tiff)) {
             quint32 tileWidth, tileLength;
             TIFFGetField(tiff, TIFFTAG_TILEWIDTH, &tileWidth);
@@ -392,8 +418,8 @@ bool QTiffHandler::read(QImage *image)
                 d->close();
                 return false;
             }
-            quint32 byteWidth = (format == QImage::Format_Mono) ? (width + 7)/8 : width;
-            quint32 byteTileWidth = (format == QImage::Format_Mono) ? tileWidth/8 : tileWidth;
+            quint32 byteWidth = (format == QImage::Format_Mono) ? (width + 7)/8 : (width * bytesPerPixel);
+            quint32 byteTileWidth = (format == QImage::Format_Mono) ? tileWidth/8 : (tileWidth * bytesPerPixel);
             for (quint32 y = 0; y < height; y += tileLength) {
                 for (quint32 x = 0; x < width; x += tileWidth) {
                     if (TIFFReadTile(tiff, buf, x, y, 0, 0) < 0) {
@@ -402,7 +428,7 @@ bool QTiffHandler::read(QImage *image)
                         return false;
                     }
                     quint32 linesToCopy = qMin(tileLength, height - y);
-                    quint32 byteOffset = (format == QImage::Format_Mono) ? x/8 : x;
+                    quint32 byteOffset = (format == QImage::Format_Mono) ? x/8 : (x * bytesPerPixel);
                     quint32 widthToCopy = qMin(byteTileWidth, byteWidth - byteOffset);
                     for (quint32 i = 0; i < linesToCopy; i++) {
                         ::memcpy(image->scanLine(y + i) + byteOffset, buf + (i * byteTileWidth), widthToCopy);
@@ -418,6 +444,8 @@ bool QTiffHandler::read(QImage *image)
                 }
             }
         }
+        if (format == QImage::Format_RGBX64)
+            rgb48fixup(image);
     } else {
         const int stopOnError = 1;
         if (TIFFReadRGBAImageOriented(tiff, width, height, reinterpret_cast<uint32 *>(image->bits()), qt2Exif(d->transformation), stopOnError)) {
@@ -651,6 +679,50 @@ bool QTiffHandler::write(const QImage &image)
             }
         }
         TIFFClose(tiff);
+    } else if (format == QImage::Format_RGBX64) {
+        if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)
+            || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW)
+            || !TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, 3)
+            || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 16)
+            || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) {
+            TIFFClose(tiff);
+            return false;
+        }
+        std::unique_ptr<quint16[]> rgb48line(new quint16[width * 3]);
+        for (int y = 0; y < height; ++y) {
+            const quint16 *srcLine = reinterpret_cast<const quint16 *>(image.constScanLine(y));
+            for (int x = 0; x < width; ++x) {
+                rgb48line[x * 3 + 0] = srcLine[x * 4 + 0];
+                rgb48line[x * 3 + 1] = srcLine[x * 4 + 1];
+                rgb48line[x * 3 + 2] = srcLine[x * 4 + 2];
+            }
+
+            if (TIFFWriteScanline(tiff, (void*)rgb48line.get(), y) != 1) {
+                TIFFClose(tiff);
+                return false;
+            }
+        }
+        TIFFClose(tiff);
+    } else if (format == QImage::Format_RGBA64
+               || format == QImage::Format_RGBA64_Premultiplied) {
+        const bool premultiplied = image.format() != QImage::Format_RGBA64;
+        const uint16 extrasamples = premultiplied ? EXTRASAMPLE_ASSOCALPHA : EXTRASAMPLE_UNASSALPHA;
+        if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)
+            || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW)
+            || !TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, 4)
+            || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 16)
+            || !TIFFSetField(tiff, TIFFTAG_EXTRASAMPLES, 1, &extrasamples)
+            || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) {
+            TIFFClose(tiff);
+            return false;
+        }
+        for (int y = 0; y < height; ++y) {
+            if (TIFFWriteScanline(tiff, (void*)image.scanLine(y), y) != 1) {
+                TIFFClose(tiff);
+                return false;
+            }
+        }
+        TIFFClose(tiff);
     } else if (!image.hasAlphaChannel()) {
         if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)
             || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW)
@@ -812,6 +884,25 @@ void QTiffHandler::convert32BitOrder(void *buffer, int width)
     }
 }
 
+void QTiffHandler::rgb48fixup(QImage *image)
+{
+    Q_ASSERT(image->depth() == 64);
+    const int h = image->height();
+    const int w = image->width();
+    uchar *scanline = image->bits();
+    const qsizetype bpl = image->bytesPerLine();
+    for (int y = 0; y < h; ++y) {
+        quint16 *dst = reinterpret_cast<uint16 *>(scanline);
+        for (int x = w - 1; x >= 0; --x) {
+            dst[x * 4 + 3] = 0xffff;
+            dst[x * 4 + 2] = dst[x * 3 + 2];
+            dst[x * 4 + 1] = dst[x * 3 + 1];
+            dst[x * 4 + 0] = dst[x * 3 + 0];
+        }
+        scanline += bpl;
+    }
+}
+
 bool QTiffHandler::ensureHaveDirectoryCount() const
 {
     if (d->directoryCount > 0)
diff --git a/src/plugins/imageformats/tiff/qtiffhandler_p.h b/src/plugins/imageformats/tiff/qtiffhandler_p.h
index c7b074db..2090e389 100644
--- a/src/plugins/imageformats/tiff/qtiffhandler_p.h
+++ b/src/plugins/imageformats/tiff/qtiffhandler_p.h
@@ -74,6 +74,7 @@ public:
     };
 private:
     void convert32BitOrder(void *buffer, int width);
+    void rgb48fixup(QImage *image);
     const QScopedPointer<QTiffHandlerPrivate> d;
     bool ensureHaveDirectoryCount() const;
 };
diff --git a/tests/auto/tiff/tst_qtiff.cpp b/tests/auto/tiff/tst_qtiff.cpp
index 1a96ab38..9c815d57 100644
--- a/tests/auto/tiff/tst_qtiff.cpp
+++ b/tests/auto/tiff/tst_qtiff.cpp
@@ -84,6 +84,8 @@ private slots:
     void tiled_data();
     void tiled();
 
+    void readRgba64();
+
 private:
     QString prefix;
 };
@@ -165,6 +167,7 @@ void tst_qtiff::readImage_data()
     QTest::newRow("tiled_mono") << QString("tiled_mono.tiff") << QSize(64, 64);
     QTest::newRow("tiled_oddsize_grayscale") << QString("tiled_oddsize_grayscale.tiff") << QSize(59, 71);
     QTest::newRow("tiled_oddsize_mono") << QString("tiled_oddsize_mono.tiff") << QSize(59, 71);
+    QTest::newRow("16bpc") << QString("16bpc.tiff") << QSize(64, 46);
 }
 
 void tst_qtiff::readImage()
@@ -384,6 +387,9 @@ void tst_qtiff::readWriteNonDestructive_data()
     QTest::newRow("tiff argb32pm") << QImage::Format_ARGB32_Premultiplied << QImage::Format_ARGB32_Premultiplied << QImageIOHandler::TransformationRotate90;
     QTest::newRow("tiff rgb32") << QImage::Format_RGB32 << QImage::Format_RGB32 << QImageIOHandler::TransformationRotate270;
     QTest::newRow("tiff grayscale") << QImage::Format_Grayscale8 << QImage::Format_Grayscale8 << QImageIOHandler::TransformationFlip;
+    QTest::newRow("tiff rgb64") << QImage::Format_RGBX64 << QImage::Format_RGBX64 << QImageIOHandler::TransformationNone;
+    QTest::newRow("tiff rgba64") << QImage::Format_RGBA64 << QImage::Format_RGBA64 << QImageIOHandler::TransformationRotate90;
+    QTest::newRow("tiff rgba64pm") << QImage::Format_RGBA64_Premultiplied << QImage::Format_RGBA64_Premultiplied << QImageIOHandler::TransformationNone;
 }
 
 void tst_qtiff::readWriteNonDestructive()
@@ -592,5 +598,16 @@ void tst_qtiff::tiled()
     QCOMPARE(expectedImage, tiledImage);
 }
 
+void tst_qtiff::readRgba64()
+{
+    QString path = prefix + QString("16bpc.tiff");
+    QImageReader reader(path);
+    QVERIFY(reader.canRead());
+    QCOMPARE(reader.imageFormat(), QImage::Format_RGBX64);
+    QImage image = reader.read();
+    QVERIFY(!image.isNull());
+    QCOMPARE(image.format(), QImage::Format_RGBX64);
+}
+
 QTEST_MAIN(tst_qtiff)
 #include "tst_qtiff.moc"
diff --git a/tests/shared/images/tiff.qrc b/tests/shared/images/tiff.qrc
index 19675ba6..91bbf93b 100644
--- a/tests/shared/images/tiff.qrc
+++ b/tests/shared/images/tiff.qrc
@@ -1,5 +1,6 @@
 <RCC>
     <qresource prefix="/">
+        <file>tiff/16bpc.tiff</file>
         <file>tiff/corrupt-data.tif</file>
         <file>tiff/grayscale-ref.tif</file>
         <file>tiff/grayscale.tif</file>
diff --git a/tests/shared/images/tiff/16bpc.tiff b/tests/shared/images/tiff/16bpc.tiff
new file mode 100644
index 0000000000000000000000000000000000000000..b1ecf264b799818ea8af40d2ebe15cae6b83b2e6
GIT binary patch
literal 21414
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
T-JadM=QZBn?%sLNZ3+G#UbsjE

literal 0
HcmV?d00001

-- 
GitLab