00001 #ifndef _WINC_GIF
00002 #define _WINC_GIF
00003
00004 #include <WXP/File.h>
00005 #include <WXP/Image.h>
00006
00007 namespace WXP {
00008 #define MAX_COLOR 256
00009
00010 class GifFile {
00011 File file;
00012 int access;
00013 bool opened;
00014 unsigned char data[1000];
00015 unsigned char *ptr;
00016 int width;
00017 int height;
00018 int depth;
00019 int use_inter;
00020 int trans;
00021
00022
00023
00024 int glob_color_exist;
00025 int glob_color_size;
00026 int local_color_exist;
00027 int local_color_size;
00028
00029 int data_size;
00030 int data_ind;
00031
00032
00033
00034 int code_size;
00035 int clear_code;
00036 int end_info_code;
00037 int coded_data;
00038 int coded_prev;
00039 int coded_mask;
00040 int coded_size;
00041
00042
00043
00044 int tab_pfix[4096];
00045 int tab_ext[4096];
00046 int tab_ind;
00047
00048
00049
00050 int pix_stack[5000];
00051 int pix_ptr;
00052
00053 unsigned int data_bits;
00054 unsigned int temp_data;
00055
00056
00057
00058
00059 struct GifHashNode {
00060 int hash;
00061 int val;
00062 GifHashNode *next;
00063 };
00064
00065 GifHashNode *htable[4096];
00066 int hnodes;
00067
00068 unsigned int cur_data;
00069 unsigned int prev_data;
00070 int out_bytes;
00071 int num_pixel;
00072
00073 int file_num;
00074 int loop_end_delay;
00075 int loop_delay;
00076
00077 public:
00078 GifFile();
00079 ~GifFile();
00080 int init();
00081
00082 GifFile( const char *filename, int access );
00083 int open( const char *filename, int access );
00084 bool isOpen();
00085 int close();
00086 int setInterlace( int val );
00087
00088
00089
00090 int read( Image &image );
00091 private:
00092 int readData();
00093 int pushPix( int val );
00094 int popPix();
00095
00096
00097
00098 public:
00099 int write( Image &image );
00100 int write( const char *file );
00101 private:
00102 int outCode( unsigned int code );
00103 int clearTable();
00104 };
00105 }
00106 #endif