diff options
author | mio <stigma@disroot.org> | 2024-09-12 18:30:19 +1000 |
---|---|---|
committer | mio <stigma@disroot.org> | 2024-09-15 14:50:28 +1000 |
commit | 6adcd877982eeb335361e53da9392aa4bfdbd86c (patch) | |
tree | 2401b293737c2c02000d2c72df7aa88e5e5a5c1f /kimgio | |
parent | 42388dbfca8954e09c316671aec383ec6e8da667 (diff) | |
download | tdelibs-6adcd877982eeb335361e53da9392aa4bfdbd86c.tar.gz tdelibs-6adcd877982eeb335361e53da9392aa4bfdbd86c.zip |
kimgio: Support TIFF transparency
See: https://mirror.git.trinitydesktop.org/gitea/TDE/tdelibs/issues/282
Signed-off-by: mio <stigma@disroot.org>
Diffstat (limited to 'kimgio')
-rw-r--r-- | kimgio/tiffr.cpp | 28 |
1 files 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 <tiffio.h> +#include <kdebug.h> #include <tqimage.h> #include <tqfile.h> #include <tdelibs_export.h> @@ -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? |