diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-10-30 03:00:24 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-10-30 03:00:24 +0100 |
commit | f60e4ba1f6cf7635e896e042452656329e897b2a (patch) | |
tree | b3c1c805c8865bd99371619a77d7a2cf40ec74f3 | |
parent | bad0c9bbcc6fbbc23fe88c0edd54f3e1e0644434 (diff) | |
parent | a9be081dacbd307eb277ef1fe6c095677e00248f (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Change-Id: I5fb7fe6fc77310fd5e298e3bc34054944ee6d896
-rw-r--r-- | src/plugins/imageformats/tiff/qtiffhandler.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/plugins/imageformats/tiff/qtiffhandler.cpp b/src/plugins/imageformats/tiff/qtiffhandler.cpp index bb6daff..edb5443 100644 --- a/src/plugins/imageformats/tiff/qtiffhandler.cpp +++ b/src/plugins/imageformats/tiff/qtiffhandler.cpp @@ -523,6 +523,15 @@ static QVector<QRgb> effectiveColorTable(const QImage &image) return colors; } +static quint32 defaultStripSize(TIFF *tiff) +{ + // Aim for 4MB strips + qint64 scanSize = qMax(tmsize_t(1), TIFFScanlineSize(tiff)); + qint64 numRows = (4 * 1024 * 1024) / scanSize; + quint32 reqSize = static_cast<quint32>(qBound(qint64(1), numRows, qint64(UINT_MAX))); + return TIFFDefaultStripSize(tiff, reqSize); +} + bool QTiffHandler::write(const QImage &image) { if (!device()->isWritable()) @@ -587,7 +596,7 @@ bool QTiffHandler::write(const QImage &image) if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, photometric) || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW) || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 1) - || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) { + || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, defaultStripSize(tiff))) { TIFFClose(tiff); return false; } @@ -623,7 +632,7 @@ bool QTiffHandler::write(const QImage &image) if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, photometric) || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW) || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8) - || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) { + || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, defaultStripSize(tiff))) { TIFFClose(tiff); return false; } @@ -631,7 +640,7 @@ bool QTiffHandler::write(const QImage &image) if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE) || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW) || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8) - || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) { + || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, defaultStripSize(tiff))) { TIFFClose(tiff); return false; } @@ -728,7 +737,7 @@ bool QTiffHandler::write(const QImage &image) || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_LZW) || !TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, 3) || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8) - || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) { + || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, defaultStripSize(tiff))) { TIFFClose(tiff); return false; } @@ -760,7 +769,7 @@ bool QTiffHandler::write(const QImage &image) || !TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, 4) || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8) || !TIFFSetField(tiff, TIFFTAG_EXTRASAMPLES, 1, &extrasamples) - || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tiff, 0))) { + || !TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, defaultStripSize(tiff))) { TIFFClose(tiff); return false; } |