kimgio: Support TIFF transparency

See: https://mirror.git.trinitydesktop.org/gitea/TDE/tdelibs/issues/282
Signed-off-by: mio <stigma@disroot.org>
pull/302/head
mio 2 weeks ago
parent 42388dbfca
commit 6adcd87798

@ -6,6 +6,7 @@
#include <tiffio.h> #include <tiffio.h>
#include <kdebug.h>
#include <tqimage.h> #include <tqimage.h>
#include <tqfile.h> #include <tqfile.h>
#include <tdelibs_export.h> #include <tdelibs_export.h>
@ -66,6 +67,9 @@ TDE_EXPORT void kimgio_tiff_read( TQImageIO *io )
uint32 width, height; uint32 width, height;
uint32 *data; uint32 *data;
uint16_t extra_samples_count;
uint16_t *extra_samples;
// FIXME: use qdatastream // FIXME: use qdatastream
// open file // open file
@ -79,9 +83,12 @@ TDE_EXPORT void kimgio_tiff_read( TQImageIO *io )
} }
// create image with loaded dimensions // create image with loaded dimensions
if( TIFFGetField( tiff, TIFFTAG_IMAGEWIDTH, &width ) != 1 if ((TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width) != 1) ||
|| TIFFGetField( tiff, TIFFTAG_IMAGELENGTH, &height ) != 1 ) (TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &height) != 1))
return; {
TIFFClose(tiff);
return;
}
TQImage image( width, height, 32 ); TQImage image( width, height, 32 );
if( image.isNull()) { if( image.isNull()) {
@ -128,6 +135,21 @@ TDE_EXPORT void kimgio_tiff_read( TQImageIO *io )
// swap rows // 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 // set channel order to Qt order
// FIXME: Right now they are the same, but will it change? // FIXME: Right now they are the same, but will it change?

Loading…
Cancel
Save