1*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 2*324bb76bSAndroid Build Coastguard Worker 3*324bb76bSAndroid Build Coastguard Worker gif_lib.h - service library for decoding and encoding GIF images 4*324bb76bSAndroid Build Coastguard Worker 5*324bb76bSAndroid Build Coastguard Worker SPDX-License-Identifier: MIT 6*324bb76bSAndroid Build Coastguard Worker 7*324bb76bSAndroid Build Coastguard Worker *****************************************************************************/ 8*324bb76bSAndroid Build Coastguard Worker 9*324bb76bSAndroid Build Coastguard Worker #ifndef _GIF_LIB_H_ 10*324bb76bSAndroid Build Coastguard Worker #define _GIF_LIB_H_ 1 11*324bb76bSAndroid Build Coastguard Worker 12*324bb76bSAndroid Build Coastguard Worker #ifdef __cplusplus 13*324bb76bSAndroid Build Coastguard Worker extern "C" { 14*324bb76bSAndroid Build Coastguard Worker #endif /* __cplusplus */ 15*324bb76bSAndroid Build Coastguard Worker 16*324bb76bSAndroid Build Coastguard Worker #define GIFLIB_MAJOR 5 17*324bb76bSAndroid Build Coastguard Worker #define GIFLIB_MINOR 2 18*324bb76bSAndroid Build Coastguard Worker #define GIFLIB_RELEASE 1 19*324bb76bSAndroid Build Coastguard Worker 20*324bb76bSAndroid Build Coastguard Worker #define GIF_ERROR 0 21*324bb76bSAndroid Build Coastguard Worker #define GIF_OK 1 22*324bb76bSAndroid Build Coastguard Worker 23*324bb76bSAndroid Build Coastguard Worker #include <stdbool.h> 24*324bb76bSAndroid Build Coastguard Worker #include <stddef.h> 25*324bb76bSAndroid Build Coastguard Worker 26*324bb76bSAndroid Build Coastguard Worker #define GIF_STAMP "GIFVER" /* First chars in file - GIF stamp. */ 27*324bb76bSAndroid Build Coastguard Worker #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1 28*324bb76bSAndroid Build Coastguard Worker #define GIF_VERSION_POS 3 /* Version first character in stamp. */ 29*324bb76bSAndroid Build Coastguard Worker #define GIF87_STAMP "GIF87a" /* First chars in file - GIF stamp. */ 30*324bb76bSAndroid Build Coastguard Worker #define GIF89_STAMP "GIF89a" /* First chars in file - GIF stamp. */ 31*324bb76bSAndroid Build Coastguard Worker 32*324bb76bSAndroid Build Coastguard Worker typedef unsigned char GifPixelType; 33*324bb76bSAndroid Build Coastguard Worker typedef unsigned char *GifRowType; 34*324bb76bSAndroid Build Coastguard Worker typedef unsigned char GifByteType; 35*324bb76bSAndroid Build Coastguard Worker typedef unsigned int GifPrefixType; 36*324bb76bSAndroid Build Coastguard Worker typedef int GifWord; 37*324bb76bSAndroid Build Coastguard Worker 38*324bb76bSAndroid Build Coastguard Worker typedef struct GifColorType { 39*324bb76bSAndroid Build Coastguard Worker GifByteType Red, Green, Blue; 40*324bb76bSAndroid Build Coastguard Worker } GifColorType; 41*324bb76bSAndroid Build Coastguard Worker 42*324bb76bSAndroid Build Coastguard Worker typedef struct ColorMapObject { 43*324bb76bSAndroid Build Coastguard Worker int ColorCount; 44*324bb76bSAndroid Build Coastguard Worker int BitsPerPixel; 45*324bb76bSAndroid Build Coastguard Worker bool SortFlag; 46*324bb76bSAndroid Build Coastguard Worker GifColorType *Colors; /* on malloc(3) heap */ 47*324bb76bSAndroid Build Coastguard Worker } ColorMapObject; 48*324bb76bSAndroid Build Coastguard Worker 49*324bb76bSAndroid Build Coastguard Worker typedef struct GifImageDesc { 50*324bb76bSAndroid Build Coastguard Worker GifWord Left, Top, Width, Height; /* Current image dimensions. */ 51*324bb76bSAndroid Build Coastguard Worker bool Interlace; /* Sequential/Interlaced lines. */ 52*324bb76bSAndroid Build Coastguard Worker ColorMapObject *ColorMap; /* The local color map */ 53*324bb76bSAndroid Build Coastguard Worker } GifImageDesc; 54*324bb76bSAndroid Build Coastguard Worker 55*324bb76bSAndroid Build Coastguard Worker typedef struct ExtensionBlock { 56*324bb76bSAndroid Build Coastguard Worker int ByteCount; 57*324bb76bSAndroid Build Coastguard Worker GifByteType *Bytes; /* on malloc(3) heap */ 58*324bb76bSAndroid Build Coastguard Worker int Function; /* The block function code */ 59*324bb76bSAndroid Build Coastguard Worker #define CONTINUE_EXT_FUNC_CODE 0x00 /* continuation subblock */ 60*324bb76bSAndroid Build Coastguard Worker #define COMMENT_EXT_FUNC_CODE 0xfe /* comment */ 61*324bb76bSAndroid Build Coastguard Worker #define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control (GIF89) */ 62*324bb76bSAndroid Build Coastguard Worker #define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */ 63*324bb76bSAndroid Build Coastguard Worker #define APPLICATION_EXT_FUNC_CODE 0xff /* application block (GIF89) */ 64*324bb76bSAndroid Build Coastguard Worker } ExtensionBlock; 65*324bb76bSAndroid Build Coastguard Worker 66*324bb76bSAndroid Build Coastguard Worker typedef struct SavedImage { 67*324bb76bSAndroid Build Coastguard Worker GifImageDesc ImageDesc; 68*324bb76bSAndroid Build Coastguard Worker GifByteType *RasterBits; /* on malloc(3) heap */ 69*324bb76bSAndroid Build Coastguard Worker int ExtensionBlockCount; /* Count of extensions before image */ 70*324bb76bSAndroid Build Coastguard Worker ExtensionBlock *ExtensionBlocks; /* Extensions before image */ 71*324bb76bSAndroid Build Coastguard Worker } SavedImage; 72*324bb76bSAndroid Build Coastguard Worker 73*324bb76bSAndroid Build Coastguard Worker typedef struct GifFileType { 74*324bb76bSAndroid Build Coastguard Worker GifWord SWidth, SHeight; /* Size of virtual canvas */ 75*324bb76bSAndroid Build Coastguard Worker GifWord SColorResolution; /* How many colors can we generate? */ 76*324bb76bSAndroid Build Coastguard Worker GifWord SBackGroundColor; /* Background color for virtual canvas */ 77*324bb76bSAndroid Build Coastguard Worker GifByteType AspectByte; /* Used to compute pixel aspect ratio */ 78*324bb76bSAndroid Build Coastguard Worker ColorMapObject *SColorMap; /* Global colormap, NULL if nonexistent. */ 79*324bb76bSAndroid Build Coastguard Worker int ImageCount; /* Number of current image (both APIs) */ 80*324bb76bSAndroid Build Coastguard Worker GifImageDesc Image; /* Current image (low-level API) */ 81*324bb76bSAndroid Build Coastguard Worker SavedImage *SavedImages; /* Image sequence (high-level API) */ 82*324bb76bSAndroid Build Coastguard Worker int ExtensionBlockCount; /* Count extensions past last image */ 83*324bb76bSAndroid Build Coastguard Worker ExtensionBlock *ExtensionBlocks; /* Extensions past last image */ 84*324bb76bSAndroid Build Coastguard Worker int Error; /* Last error condition reported */ 85*324bb76bSAndroid Build Coastguard Worker void *UserData; /* hook to attach user data (TVT) */ 86*324bb76bSAndroid Build Coastguard Worker void *Private; /* Don't mess with this! */ 87*324bb76bSAndroid Build Coastguard Worker } GifFileType; 88*324bb76bSAndroid Build Coastguard Worker 89*324bb76bSAndroid Build Coastguard Worker #define GIF_ASPECT_RATIO(n) ((n) + 15.0 / 64.0) 90*324bb76bSAndroid Build Coastguard Worker 91*324bb76bSAndroid Build Coastguard Worker typedef enum { 92*324bb76bSAndroid Build Coastguard Worker UNDEFINED_RECORD_TYPE, 93*324bb76bSAndroid Build Coastguard Worker SCREEN_DESC_RECORD_TYPE, 94*324bb76bSAndroid Build Coastguard Worker IMAGE_DESC_RECORD_TYPE, /* Begin with ',' */ 95*324bb76bSAndroid Build Coastguard Worker EXTENSION_RECORD_TYPE, /* Begin with '!' */ 96*324bb76bSAndroid Build Coastguard Worker TERMINATE_RECORD_TYPE /* Begin with ';' */ 97*324bb76bSAndroid Build Coastguard Worker } GifRecordType; 98*324bb76bSAndroid Build Coastguard Worker 99*324bb76bSAndroid Build Coastguard Worker /* func type to read gif data from arbitrary sources (TVT) */ 100*324bb76bSAndroid Build Coastguard Worker typedef int (*InputFunc)(GifFileType *, GifByteType *, int); 101*324bb76bSAndroid Build Coastguard Worker 102*324bb76bSAndroid Build Coastguard Worker /* func type to write gif data to arbitrary targets. 103*324bb76bSAndroid Build Coastguard Worker * Returns count of bytes written. (MRB) 104*324bb76bSAndroid Build Coastguard Worker */ 105*324bb76bSAndroid Build Coastguard Worker typedef int (*OutputFunc)(GifFileType *, const GifByteType *, int); 106*324bb76bSAndroid Build Coastguard Worker 107*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 108*324bb76bSAndroid Build Coastguard Worker GIF89 structures 109*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 110*324bb76bSAndroid Build Coastguard Worker 111*324bb76bSAndroid Build Coastguard Worker typedef struct GraphicsControlBlock { 112*324bb76bSAndroid Build Coastguard Worker int DisposalMode; 113*324bb76bSAndroid Build Coastguard Worker #define DISPOSAL_UNSPECIFIED 0 /* No disposal specified. */ 114*324bb76bSAndroid Build Coastguard Worker #define DISPOSE_DO_NOT 1 /* Leave image in place */ 115*324bb76bSAndroid Build Coastguard Worker #define DISPOSE_BACKGROUND 2 /* Set area too background color */ 116*324bb76bSAndroid Build Coastguard Worker #define DISPOSE_PREVIOUS 3 /* Restore to previous content */ 117*324bb76bSAndroid Build Coastguard Worker bool UserInputFlag; /* User confirmation required before disposal */ 118*324bb76bSAndroid Build Coastguard Worker int DelayTime; /* pre-display delay in 0.01sec units */ 119*324bb76bSAndroid Build Coastguard Worker int TransparentColor; /* Palette index for transparency, -1 if none */ 120*324bb76bSAndroid Build Coastguard Worker #define NO_TRANSPARENT_COLOR -1 121*324bb76bSAndroid Build Coastguard Worker } GraphicsControlBlock; 122*324bb76bSAndroid Build Coastguard Worker 123*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 124*324bb76bSAndroid Build Coastguard Worker GIF encoding routines 125*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 126*324bb76bSAndroid Build Coastguard Worker 127*324bb76bSAndroid Build Coastguard Worker /* Main entry points */ 128*324bb76bSAndroid Build Coastguard Worker GifFileType *EGifOpenFileName(const char *GifFileName, 129*324bb76bSAndroid Build Coastguard Worker const bool GifTestExistence, int *Error); 130*324bb76bSAndroid Build Coastguard Worker GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error); 131*324bb76bSAndroid Build Coastguard Worker GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error); 132*324bb76bSAndroid Build Coastguard Worker int EGifSpew(GifFileType *GifFile); 133*324bb76bSAndroid Build Coastguard Worker const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */ 134*324bb76bSAndroid Build Coastguard Worker int EGifCloseFile(GifFileType *GifFile, int *ErrorCode); 135*324bb76bSAndroid Build Coastguard Worker 136*324bb76bSAndroid Build Coastguard Worker #define E_GIF_SUCCEEDED 0 137*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_OPEN_FAILED 1 /* And EGif possible errors. */ 138*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_WRITE_FAILED 2 139*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_HAS_SCRN_DSCR 3 140*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_HAS_IMAG_DSCR 4 141*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_NO_COLOR_MAP 5 142*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_DATA_TOO_BIG 6 143*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_NOT_ENOUGH_MEM 7 144*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_DISK_IS_FULL 8 145*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_CLOSE_FAILED 9 146*324bb76bSAndroid Build Coastguard Worker #define E_GIF_ERR_NOT_WRITEABLE 10 147*324bb76bSAndroid Build Coastguard Worker 148*324bb76bSAndroid Build Coastguard Worker /* These are legacy. You probably do not want to call them directly */ 149*324bb76bSAndroid Build Coastguard Worker int EGifPutScreenDesc(GifFileType *GifFile, const int GifWidth, 150*324bb76bSAndroid Build Coastguard Worker const int GifHeight, const int GifColorRes, 151*324bb76bSAndroid Build Coastguard Worker const int GifBackGround, 152*324bb76bSAndroid Build Coastguard Worker const ColorMapObject *GifColorMap); 153*324bb76bSAndroid Build Coastguard Worker int EGifPutImageDesc(GifFileType *GifFile, const int GifLeft, const int GifTop, 154*324bb76bSAndroid Build Coastguard Worker const int GifWidth, const int GifHeight, 155*324bb76bSAndroid Build Coastguard Worker const bool GifInterlace, 156*324bb76bSAndroid Build Coastguard Worker const ColorMapObject *GifColorMap); 157*324bb76bSAndroid Build Coastguard Worker void EGifSetGifVersion(GifFileType *GifFile, const bool gif89); 158*324bb76bSAndroid Build Coastguard Worker int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen); 159*324bb76bSAndroid Build Coastguard Worker int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel); 160*324bb76bSAndroid Build Coastguard Worker int EGifPutComment(GifFileType *GifFile, const char *GifComment); 161*324bb76bSAndroid Build Coastguard Worker int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode); 162*324bb76bSAndroid Build Coastguard Worker int EGifPutExtensionBlock(GifFileType *GifFile, const int GifExtLen, 163*324bb76bSAndroid Build Coastguard Worker const void *GifExtension); 164*324bb76bSAndroid Build Coastguard Worker int EGifPutExtensionTrailer(GifFileType *GifFile); 165*324bb76bSAndroid Build Coastguard Worker int EGifPutExtension(GifFileType *GifFile, const int GifExtCode, 166*324bb76bSAndroid Build Coastguard Worker const int GifExtLen, const void *GifExtension); 167*324bb76bSAndroid Build Coastguard Worker int EGifPutCode(GifFileType *GifFile, int GifCodeSize, 168*324bb76bSAndroid Build Coastguard Worker const GifByteType *GifCodeBlock); 169*324bb76bSAndroid Build Coastguard Worker int EGifPutCodeNext(GifFileType *GifFile, const GifByteType *GifCodeBlock); 170*324bb76bSAndroid Build Coastguard Worker 171*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 172*324bb76bSAndroid Build Coastguard Worker GIF decoding routines 173*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 174*324bb76bSAndroid Build Coastguard Worker 175*324bb76bSAndroid Build Coastguard Worker /* Main entry points */ 176*324bb76bSAndroid Build Coastguard Worker GifFileType *DGifOpenFileName(const char *GifFileName, int *Error); 177*324bb76bSAndroid Build Coastguard Worker GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error); 178*324bb76bSAndroid Build Coastguard Worker int DGifSlurp(GifFileType *GifFile); 179*324bb76bSAndroid Build Coastguard Worker GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, 180*324bb76bSAndroid Build Coastguard Worker int *Error); /* new one (TVT) */ 181*324bb76bSAndroid Build Coastguard Worker int DGifCloseFile(GifFileType *GifFile, int *ErrorCode); 182*324bb76bSAndroid Build Coastguard Worker 183*324bb76bSAndroid Build Coastguard Worker #define D_GIF_SUCCEEDED 0 184*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */ 185*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_READ_FAILED 102 186*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NOT_GIF_FILE 103 187*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NO_SCRN_DSCR 104 188*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NO_IMAG_DSCR 105 189*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NO_COLOR_MAP 106 190*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_WRONG_RECORD 107 191*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_DATA_TOO_BIG 108 192*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NOT_ENOUGH_MEM 109 193*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_CLOSE_FAILED 110 194*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_NOT_READABLE 111 195*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_IMAGE_DEFECT 112 196*324bb76bSAndroid Build Coastguard Worker #define D_GIF_ERR_EOF_TOO_SOON 113 197*324bb76bSAndroid Build Coastguard Worker 198*324bb76bSAndroid Build Coastguard Worker /* These are legacy. You probably do not want to call them directly */ 199*324bb76bSAndroid Build Coastguard Worker int DGifGetScreenDesc(GifFileType *GifFile); 200*324bb76bSAndroid Build Coastguard Worker int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType); 201*324bb76bSAndroid Build Coastguard Worker int DGifGetImageHeader(GifFileType *GifFile); 202*324bb76bSAndroid Build Coastguard Worker int DGifGetImageDesc(GifFileType *GifFile); 203*324bb76bSAndroid Build Coastguard Worker int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen); 204*324bb76bSAndroid Build Coastguard Worker int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel); 205*324bb76bSAndroid Build Coastguard Worker int DGifGetExtension(GifFileType *GifFile, int *GifExtCode, 206*324bb76bSAndroid Build Coastguard Worker GifByteType **GifExtension); 207*324bb76bSAndroid Build Coastguard Worker int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension); 208*324bb76bSAndroid Build Coastguard Worker int DGifGetCode(GifFileType *GifFile, int *GifCodeSize, 209*324bb76bSAndroid Build Coastguard Worker GifByteType **GifCodeBlock); 210*324bb76bSAndroid Build Coastguard Worker int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock); 211*324bb76bSAndroid Build Coastguard Worker int DGifGetLZCodes(GifFileType *GifFile, int *GifCode); 212*324bb76bSAndroid Build Coastguard Worker const char *DGifGetGifVersion(GifFileType *GifFile); 213*324bb76bSAndroid Build Coastguard Worker 214*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 215*324bb76bSAndroid Build Coastguard Worker Error handling and reporting. 216*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 217*324bb76bSAndroid Build Coastguard Worker extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */ 218*324bb76bSAndroid Build Coastguard Worker 219*324bb76bSAndroid Build Coastguard Worker /***************************************************************************** 220*324bb76bSAndroid Build Coastguard Worker Everything below this point is new after version 1.2, supporting `slurp 221*324bb76bSAndroid Build Coastguard Worker mode' for doing I/O in two big belts with all the image-bashing in core. 222*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 223*324bb76bSAndroid Build Coastguard Worker 224*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 225*324bb76bSAndroid Build Coastguard Worker Color map handling from gif_alloc.c 226*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 227*324bb76bSAndroid Build Coastguard Worker 228*324bb76bSAndroid Build Coastguard Worker extern ColorMapObject *GifMakeMapObject(int ColorCount, 229*324bb76bSAndroid Build Coastguard Worker const GifColorType *ColorMap); 230*324bb76bSAndroid Build Coastguard Worker extern void GifFreeMapObject(ColorMapObject *Object); 231*324bb76bSAndroid Build Coastguard Worker extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1, 232*324bb76bSAndroid Build Coastguard Worker const ColorMapObject *ColorIn2, 233*324bb76bSAndroid Build Coastguard Worker GifPixelType ColorTransIn2[]); 234*324bb76bSAndroid Build Coastguard Worker extern int GifBitSize(int n); 235*324bb76bSAndroid Build Coastguard Worker 236*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 237*324bb76bSAndroid Build Coastguard Worker Support for the in-core structures allocation (slurp mode). 238*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 239*324bb76bSAndroid Build Coastguard Worker 240*324bb76bSAndroid Build Coastguard Worker extern void GifApplyTranslation(SavedImage *Image, 241*324bb76bSAndroid Build Coastguard Worker const GifPixelType Translation[]); 242*324bb76bSAndroid Build Coastguard Worker extern int GifAddExtensionBlock(int *ExtensionBlock_Count, 243*324bb76bSAndroid Build Coastguard Worker ExtensionBlock **ExtensionBlocks, int Function, 244*324bb76bSAndroid Build Coastguard Worker unsigned int Len, unsigned char ExtData[]); 245*324bb76bSAndroid Build Coastguard Worker extern void GifFreeExtensions(int *ExtensionBlock_Count, 246*324bb76bSAndroid Build Coastguard Worker ExtensionBlock **ExtensionBlocks); 247*324bb76bSAndroid Build Coastguard Worker extern SavedImage *GifMakeSavedImage(GifFileType *GifFile, 248*324bb76bSAndroid Build Coastguard Worker const SavedImage *CopyFrom); 249*324bb76bSAndroid Build Coastguard Worker extern void GifFreeSavedImages(GifFileType *GifFile); 250*324bb76bSAndroid Build Coastguard Worker 251*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 252*324bb76bSAndroid Build Coastguard Worker 5.x functions for GIF89 graphics control blocks 253*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 254*324bb76bSAndroid Build Coastguard Worker 255*324bb76bSAndroid Build Coastguard Worker int DGifExtensionToGCB(const size_t GifExtensionLength, 256*324bb76bSAndroid Build Coastguard Worker const GifByteType *GifExtension, 257*324bb76bSAndroid Build Coastguard Worker GraphicsControlBlock *GCB); 258*324bb76bSAndroid Build Coastguard Worker size_t EGifGCBToExtension(const GraphicsControlBlock *GCB, 259*324bb76bSAndroid Build Coastguard Worker GifByteType *GifExtension); 260*324bb76bSAndroid Build Coastguard Worker 261*324bb76bSAndroid Build Coastguard Worker int DGifSavedExtensionToGCB(GifFileType *GifFile, int ImageIndex, 262*324bb76bSAndroid Build Coastguard Worker GraphicsControlBlock *GCB); 263*324bb76bSAndroid Build Coastguard Worker int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB, 264*324bb76bSAndroid Build Coastguard Worker GifFileType *GifFile, int ImageIndex); 265*324bb76bSAndroid Build Coastguard Worker 266*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 267*324bb76bSAndroid Build Coastguard Worker The library's internal utility font 268*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 269*324bb76bSAndroid Build Coastguard Worker 270*324bb76bSAndroid Build Coastguard Worker #define GIF_FONT_WIDTH 8 271*324bb76bSAndroid Build Coastguard Worker #define GIF_FONT_HEIGHT 8 272*324bb76bSAndroid Build Coastguard Worker extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH]; 273*324bb76bSAndroid Build Coastguard Worker 274*324bb76bSAndroid Build Coastguard Worker extern void GifDrawText8x8(SavedImage *Image, const int x, const int y, 275*324bb76bSAndroid Build Coastguard Worker const char *legend, const int color); 276*324bb76bSAndroid Build Coastguard Worker 277*324bb76bSAndroid Build Coastguard Worker extern void GifDrawBox(SavedImage *Image, const int x, const int y, const int w, 278*324bb76bSAndroid Build Coastguard Worker const int d, const int color); 279*324bb76bSAndroid Build Coastguard Worker 280*324bb76bSAndroid Build Coastguard Worker extern void GifDrawRectangle(SavedImage *Image, const int x, const int y, 281*324bb76bSAndroid Build Coastguard Worker const int w, const int d, const int color); 282*324bb76bSAndroid Build Coastguard Worker 283*324bb76bSAndroid Build Coastguard Worker extern void GifDrawBoxedText8x8(SavedImage *Image, const int x, const int y, 284*324bb76bSAndroid Build Coastguard Worker const char *legend, const int border, 285*324bb76bSAndroid Build Coastguard Worker const int bg, const int fg); 286*324bb76bSAndroid Build Coastguard Worker 287*324bb76bSAndroid Build Coastguard Worker #ifdef __cplusplus 288*324bb76bSAndroid Build Coastguard Worker } 289*324bb76bSAndroid Build Coastguard Worker #endif /* __cplusplus */ 290*324bb76bSAndroid Build Coastguard Worker #endif /* _GIF_LIB_H */ 291*324bb76bSAndroid Build Coastguard Worker 292*324bb76bSAndroid Build Coastguard Worker /* end */ 293