diff options
Diffstat (limited to 'kimgio/g3r.cpp')
-rw-r--r-- | kimgio/g3r.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/kimgio/g3r.cpp b/kimgio/g3r.cpp new file mode 100644 index 000000000..d67aa2da6 --- /dev/null +++ b/kimgio/g3r.cpp @@ -0,0 +1,53 @@ +// This library is distributed under the conditions of the GNU LGPL. + +#include "config.h" + +#ifdef HAVE_LIBTIFF + +#include <tiffio.h> + +#include <qimage.h> +#include <qfile.h> + +#include "g3r.h" + +KDE_EXPORT void kimgio_g3_read( QImageIO *io ) +{ + // This won't work if io is not a QFile ! + TIFF *tiff = TIFFOpen(QFile::encodeName(io->fileName()), "r"); + if (!tiff) + return; + + uint32 width, height; + tsize_t scanlength; + + if( TIFFGetField( tiff, TIFFTAG_IMAGEWIDTH, &width ) != 1 + || TIFFGetField( tiff, TIFFTAG_IMAGELENGTH, &height ) != 1 ) + return; + scanlength = TIFFScanlineSize(tiff); + + QImage image(width, height, 1, 0, QImage::BigEndian); + + if (image.isNull() || scanlength != image.bytesPerLine()) + { + TIFFClose(tiff); + return; + } + + for (uint32 y=0; y < height; y++) + TIFFReadScanline(tiff, image.scanLine(y), y); + + TIFFClose(tiff); + + io->setImage(image); + io->setStatus(0); +} + + +KDE_EXPORT void kimgio_g3_write(QImageIO *) +{ + // TODO: stub +} + + +#endif |