/**************************************************************************** ** $Id: qasyncimageio.h,v 1.18.2.1 1998/08/19 16:02:28 agulbra Exp $ ** ** *** INTERNAL HEADER FILE *** ** ** This file is NOT a part of the Qt interface! ** ** Definition of asynchronous image/movie loading classes ** ** Created : 970617 ** ** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. ** ** This file is part of Qt Free Edition, version 1.42. ** ** See the file LICENSE included in the distribution for the usage ** and distribution terms, or http://www.troll.no/free-license.html. ** ** IMPORTANT NOTE: You may NOT copy this file or any part of it into ** your own programs or libraries. ** ** Please see http://www.troll.no/pricing.html for information about ** Qt Professional Edition, which is this same library but with a ** license which allows creation of commercial/proprietary software. ** *****************************************************************************/ #ifndef QASYNCIMAGEIO_H #define QASYNCIMAGEIO_H #ifndef QT_H #include "qimage.h" #endif // QT_H class Q_EXPORT QImageConsumer { public: virtual void changed(const QRect&)=0; virtual void end()=0; virtual void frameDone()=0; virtual void setLooping(int)=0; virtual void setFramePeriod(int)=0; virtual void setSize(int, int)=0; }; class Q_EXPORT QImageFormat { public: virtual ~QImageFormat(); virtual int decode(QImage& img, QImageConsumer* consumer, const uchar* buffer, int length)=0; }; class Q_EXPORT QImageFormatType { public: virtual ~QImageFormatType(); virtual QImageFormat* decoderFor(const uchar* buffer, int length)=0; virtual const char* formatName() const=0; protected: QImageFormatType(); }; struct QImageDecoderPrivate; class Q_EXPORT QImageDecoder { public: QImageDecoder(QImageConsumer* c); ~QImageDecoder(); const QImage& image() { return img; } int decode(const uchar* buffer, int length); static const char* formatName(const uchar* buffer, int length); static QStrList inputFormats(); static void registerDecoderFactory(QImageFormatType*); static void unregisterDecoderFactory(QImageFormatType*); private: QImageFormat* actual_decoder; QImageConsumer* consumer; QImage img; QImageDecoderPrivate *d; }; class Q_EXPORT QGIFFormat : public QImageFormat { public: QGIFFormat(); virtual ~QGIFFormat(); int decode(QImage& img, QImageConsumer* consumer, const uchar* buffer, int length); private: void fillRect(QImage&, int x, int y, int w, int h, uchar col); // GIF specific stuff QRgb* globalcmap; QImage backingstore; unsigned char hold[16]; bool gif89; int count; int ccount; int expectcount; enum State { Header, LogicalScreenDescriptor, GlobalColorMap, LocalColorMap, Introducer, ImageDescriptor, TableImageLZWSize, ImageDataBlockSize, ImageDataBlock, ExtensionLabel, GraphicControlExtension, ApplicationExtension, NetscapeExtensionBlockSize, NetscapeExtensionBlock, SkipBlockSize, SkipBlock, Done, Error } state; int gncols; int ncols; int lzwsize; bool lcmap; int swidth, sheight; int left, top, right, bottom; enum Disposal { NoDisposal, DoNotChange, RestoreBackground, RestoreImage }; Disposal disposal; bool disposed; int trans; bool preserve_trans; bool gcmap; int bgcol; int interlace; int accum; int bitcount; enum { max_lzw_bits=12 }; // (poor-compiler's static const int) int code_size, clear_code, end_code, max_code_size, max_code; int firstcode, oldcode, incode; short table[2][1<< max_lzw_bits]; short stack[(1<<(max_lzw_bits))*2]; short *sp; bool needfirst; int x, y; int frame; bool out_of_bounds; bool digress; void nextY(QImage& img, QImageConsumer* consumer); void disposePrevious( QImage& img, QImageConsumer* consumer ); }; class Q_EXPORT QGIFFormatType : public QImageFormatType { QImageFormat* decoderFor(const uchar* buffer, int length); const char* formatName() const; }; #endif // QASYNCIMAGEIO_H
Copyright © 1998 Troll Tech | Trademarks | Qt version 1.42
|