/****************************************************************************** * * $Id$ * * * Copyright (C) 1997-2009 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby * granted. No representations are made about the suitability of this software * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * * All output generated with Doxygen is not covered by this license. * */ #ifndef _GIFENC_H #define _GIFENC_H #include typedef unsigned char Byte; typedef unsigned short Word; struct Color { Byte red; Byte green; Byte blue; }; const int hashTableSize=5003; // size of the hash table class GifEncoder { public: GifEncoder(Byte *rawBytes,Color *p,int w,int h,Byte d,int t); ~GifEncoder(); void writeGIF(QFile &fp); protected: void putWord( Word w, QFile &fp ); void putByte( Byte b, QFile &fp ); void compress(int csize, QFile &fp); void writeCode(int code, QFile &fp); void writeChar( Byte c, QFile &fp ); void writePacket(QFile &fp); void clearHashTable(); int nextPixel() { if ( --numPixels < 0) return EOF; return *dataPtr++; } private: const int colorResolution; // 8 bit for Red, Green and Blue; const int globalPaletteFlag; const int bits; const int maxMaxCode; // image variables int width; // image width int height; // image height Byte depth; // bits per CLUT entry int transIndex; // index of the transparant color; -1 = none Color *palette; // pointer to the color palette int numPixels; // total number of pixel (i.e. width * height) Byte *data; // pointer to the image data (one byte per pixel) Byte *dataPtr; // pointer located at the current pixel. // compression variables bool clearFlag; // clear hash table flag int freeEntry; // first free entry in the hash table unsigned int curAccum; // encoded bit accumulator int curBits; // number of bits in curAccum Byte accum[256]; // Buffer for a packet int aCount; // Number of characters so far in this 'packet' int nBits; // number of bits/code int maxCode; // maximum code, given n_bits int initBits; // initial number of bits int EOFCode; // code for signaling the end of the file int ClearCode; // the clear code for the decompressor // tables int htab[hashTableSize]; // the hash table Word codetab[hashTableSize]; // the code table }; #endif