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