From 6adcd877982eeb335361e53da9392aa4bfdbd86c Mon Sep 17 00:00:00 2001 From: mio Date: Thu, 12 Sep 2024 18:30:19 +1000 Subject: [PATCH] kimgio: Support TIFF transparency See: https://mirror.git.trinitydesktop.org/gitea/TDE/tdelibs/issues/282 Signed-off-by: mio --- kimgio/tiffr.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/kimgio/tiffr.cpp b/kimgio/tiffr.cpp index 7f7b13ea6..79f890bfe 100644 --- a/kimgio/tiffr.cpp +++ b/kimgio/tiffr.cpp @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -66,6 +67,9 @@ TDE_EXPORT void kimgio_tiff_read( TQImageIO *io ) uint32 width, height; uint32 *data; + uint16_t extra_samples_count; + uint16_t *extra_samples; + // FIXME: use qdatastream // open file @@ -79,9 +83,12 @@ TDE_EXPORT void kimgio_tiff_read( TQImageIO *io ) } // create image with loaded dimensions - if( TIFFGetField( tiff, TIFFTAG_IMAGEWIDTH, &width ) != 1 - || TIFFGetField( tiff, TIFFTAG_IMAGELENGTH, &height ) != 1 ) - return; + if ((TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width) != 1) || + (TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &height) != 1)) + { + TIFFClose(tiff); + return; + } TQImage image( width, height, 32 ); if( image.isNull()) { @@ -128,6 +135,21 @@ TDE_EXPORT void kimgio_tiff_read( TQImageIO *io ) // swap rows } + // Extra Samples + if (TIFFGetField(tiff, TIFFTAG_EXTRASAMPLES, &extra_samples_count, &extra_samples) == 1) + { + kdDebug(399) << "TIFF image has " << extra_samples_count << " extra sample(s)." << endl; + for (uint16_t i = 0; i < extra_samples_count; i++) + { + if ((extra_samples[i] == EXTRASAMPLE_ASSOCALPHA) || + (extra_samples[i] == EXTRASAMPLE_UNASSALPHA)) + { + image.setAlphaBuffer(true); + break; + } + } + } + // set channel order to Qt order // FIXME: Right now they are the same, but will it change?