diff options
Diffstat (limited to 'kimgio/tiffr.cpp')
| -rw-r--r-- | kimgio/tiffr.cpp | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/kimgio/tiffr.cpp b/kimgio/tiffr.cpp index bbffa82a9..2678d537e 100644 --- a/kimgio/tiffr.cpp +++ b/kimgio/tiffr.cpp @@ -6,12 +6,20 @@ #include <tiffio.h> +#include <kdebug.h> #include <tqimage.h> #include <tqfile.h> #include <tdelibs_export.h> #include <assert.h> +#if (TIFFLIB_VERSION >= 20210416) +#undef uint16 +#define uint16 uint16_t +#undef uint32 +#define uint32 uint32_t +#endif + #include "tiffr.h" static tsize_t tiff_read( thandle_t handle, tdata_t buf, tsize_t size ) @@ -60,12 +68,15 @@ static void tiff_unmap( thandle_t, tdata_t, toff_t ) { } -KDE_EXPORT void kimgio_tiff_read( TQImageIO *io ) +TDE_EXPORT void kimgio_tiff_read( TQImageIO *io ) { TIFF *tiff; uint32 width, height; uint32 *data; + uint16 extra_samples_count; + uint16 *extra_samples; + // FIXME: use qdatastream // open file @@ -79,9 +90,12 @@ KDE_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 +142,21 @@ KDE_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 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? @@ -143,7 +172,7 @@ KDE_EXPORT void kimgio_tiff_read( TQImageIO *io ) io->setStatus ( 0 ); } -KDE_EXPORT void kimgio_tiff_write( TQImageIO * ) +TDE_EXPORT void kimgio_tiff_write( TQImageIO * ) { // TODO: stub } |
