00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
#ifndef GIFBITMAP_HEADER_READ
00029 #define GIFBITMAP_HEADER_READ 1
00030
00031
#include "BitmapImage.h"
00032
#ifdef HAVE_CSTD_INCLUDE
00033
#include <cstdio>
00034
#else
00035
#include <stdio.h>
00036
#endif
00037
00038 typedef int code_int;
00039
#ifdef SIGNED_COMPARE_SLOW
00040
typedef unsigned long int count_int;
00041
typedef unsigned short int count_short;
00042
#else
00043 typedef long int count_int;
00044
#endif
00045
00046 class GIFBitmap :
public BitmapImage {
00047
public:
00048
00049
GIFBitmap (
const int w,
const int h,
const int bpp=1);
00050
~GIFBitmap ();
00051
void setBitmap (
const Byte *b);
00052
void setBitmapRow (
const Byte *b);
00053
00054
void write (
const string filename);
00055 string
fileExtension()
const {
return "gif"; }
00056
00057
private:
00058
00059
00060
00061
00062
00063
00064
00065
void GIFEncode(FILE* fp,
00066
int GWidth,
int GHeight,
00067
int GInterlace,
00068
int Background,
00069
int Transparent,
00070
int BitsPerPixel,
00071
int *Red,
int *Green,
int *Blue);
00072
void BumpPixel(
void);
00073
int GIFNextPixel(
void);
00074
void Putword(
int w, FILE* fp);
00075
void compress(
int init_bits, FILE* outfile);
00076
void output(code_int code);
00077
void cl_block (
void);
00078
void cl_hash(count_int hsize);
00079
void char_init(
void);
00080
void char_out(
int c );
00081
void flush_char();
00082
00083
00084
00085
int Width, Height;
00086
int curx, cury;
00087
long CountDown;
00088
int Pass;
00089
int Interlace;
00090
00091
#if 0
00092
const int BITS = 12;
00093
const int HSIZE = 5003;
00094
#endif
00095 #define BITS 12
00096 #define HSIZE 5003
00097
00098
int n_bits;
00099
int maxbits;
00100
code_int maxcode;
00101
code_int maxmaxcode;
00102
00103
count_int htab [
HSIZE];
00104
unsigned short codetab [
HSIZE];
00105
code_int hsize;
00106
00107
code_int free_ent;
00108
00109
int clear_flg;
00110
00111
int offset;
00112
long int in_count;
00113
long int out_count;
00114
00115
int g_init_bits;
00116 FILE* g_outfile;
00117
00118
int ClearCode;
00119
int EOFCode;
00120
00121
unsigned long cur_accum;
00122
int cur_bits;
00123
00124
int a_count;
00125
char accum[ 256 ];
00126
00127
static const unsigned long masks[];
00128 };
00129
#endif // #ifndef GIFBITMAP_HEADER_READ