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 <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?

Loading…
Cancel
Save