10 #if GFX_USE_GDISP && GDISP_NEED_IMAGE 
   14 #if GDISP_NEED_IMAGE_NATIVE 
   16     extern void gdispImageClose_NATIVE(
gImage *img);
 
   19     extern gDelay gdispImageNext_NATIVE(
gImage *img);
 
   22 #if GDISP_NEED_IMAGE_GIF 
   24     extern void gdispImageClose_GIF(
gImage *img);
 
   27     extern gDelay gdispImageNext_GIF(
gImage *img);
 
   30 #if GDISP_NEED_IMAGE_BMP 
   32     extern void gdispImageClose_BMP(
gImage *img);
 
   35     extern gDelay gdispImageNext_BMP(
gImage *img);
 
   36     extern gU16 gdispImageGetPaletteSize_BMP(
gImage *img);
 
   37     extern gColor gdispImageGetPalette_BMP(
gImage *img, gU16 index);
 
   38     extern gBool gdispImageAdjustPalette_BMP(
gImage *img, gU16 index, 
gColor newColor);
 
   41 #if GDISP_NEED_IMAGE_JPG 
   43     extern void gdispImageClose_JPG(
gImage *img);
 
   46     extern gDelay gdispImageNext_JPG(
gImage *img);
 
   49 #if GDISP_NEED_IMAGE_PNG 
   51     extern void gdispImageClose_PNG(
gImage *img);
 
   54     extern gDelay gdispImageNext_PNG(
gImage *img);
 
   58 typedef struct gdispImageHandlers {
 
   60     void            (*close)(
gImage *img);                  
 
   67     gDelay      (*next)(
gImage *img);                   
 
   68     gU16        (*getPaletteSize)(
gImage *img);         
 
   70     gBool           (*adjustPalette)(
gImage *img, gU16 index, 
gColor newColor); 
 
   73 static gdispImageHandlers ImageHandlers[] = {
 
   74     #if GDISP_NEED_IMAGE_NATIVE 
   75         {   gdispImageOpen_NATIVE,  gdispImageClose_NATIVE,
 
   76             gdispImageCache_NATIVE, gdispGImageDraw_NATIVE, gdispImageNext_NATIVE,
 
   80     #if GDISP_NEED_IMAGE_GIF 
   81         {   gdispImageOpen_GIF,     gdispImageClose_GIF,
 
   82             gdispImageCache_GIF,    gdispGImageDraw_GIF,    gdispImageNext_GIF,
 
   86     #if GDISP_NEED_IMAGE_BMP 
   87         {   gdispImageOpen_BMP,             gdispImageClose_BMP,
 
   88             gdispImageCache_BMP,            gdispGImageDraw_BMP,        gdispImageNext_BMP,
 
   89             gdispImageGetPaletteSize_BMP,   gdispImageGetPalette_BMP,   gdispImageAdjustPalette_BMP
 
   92     #if GDISP_NEED_IMAGE_JPG 
   93         {   gdispImageOpen_JPG,     gdispImageClose_JPG,
 
   94             gdispImageCache_JPG,    gdispGImageDraw_JPG,    gdispImageNext_JPG,
 
   98     #if GDISP_NEED_IMAGE_PNG 
   99         {   gdispImageOpen_PNG,     gdispImageClose_PNG,
 
  100             gdispImageCache_PNG,    gdispGImageDraw_PNG,    gdispImageNext_PNG,
 
  107     img->type = GDISP_IMAGE_TYPE_UNKNOWN;
 
  114         return GDISP_IMAGE_ERR_NULLPOINTER;
 
  116         return GDISP_IMAGE_ERR_NOSUCHFILE;
 
  118     img->bgcolor = GFX_WHITE;
 
  119     for(img->fns = ImageHandlers; img->fns < ImageHandlers+
sizeof(ImageHandlers)/
sizeof(ImageHandlers[0]); img->fns++) {
 
  120         err = img->fns->open(img);
 
  121         if (err != GDISP_IMAGE_ERR_BADFORMAT) {
 
  122             if ((err & GDISP_IMAGE_ERR_UNRECOVERABLE))
 
  133     err = GDISP_IMAGE_ERR_BADFORMAT;
 
  134     img->type = GDISP_IMAGE_TYPE_UNKNOWN;
 
  149         img->fns->close(img);
 
  151     img->type = GDISP_IMAGE_TYPE_UNKNOWN;
 
  158     return img && img->type != GDISP_IMAGE_TYPE_UNKNOWN && img->fns != 0;
 
  164     img->bgcolor = bgcolor;
 
  168     if (!img) 
return GDISP_IMAGE_ERR_NULLPOINTER;
 
  169     if (!img->fns) 
return GDISP_IMAGE_ERR_BADFORMAT;
 
  170     return img->fns->cache(img);
 
  174     if (!img) 
return GDISP_IMAGE_ERR_NULLPOINTER;
 
  175     if (!img->fns) 
return GDISP_IMAGE_ERR_BADFORMAT;
 
  178     if (cx <= 0 || cy <= 0) 
return GDISP_IMAGE_ERR_OK;
 
  181     if (sx >= img->width || sy >= img->height) 
return GDISP_IMAGE_ERR_OK;
 
  182     if (sx + cx > img->width)  cx = img->width - sx;
 
  183     if (sy + cy > img->height) cy = img->height - sy;
 
  186     return img->fns->draw(g, img, x, y, cx, cy, sx, sy);
 
  190     if (!img) 
return GDISP_IMAGE_ERR_NULLPOINTER;
 
  191     if (!img->fns) 
return GDISP_IMAGE_ERR_BADFORMAT;
 
  192     return img->fns->next(img);
 
  196     if (!img || !img->fns) 
return 0;
 
  197     if (!img->fns->getPaletteSize) 
return 0;
 
  198     return img->fns->getPaletteSize(img);
 
  202     if (!img || !img->fns) 
return 0;
 
  203     if (!img->fns->getPalette) 
return 0;
 
  204     return img->fns->getPalette(img, index);
 
  208     if (!img || !img->fns) 
return gFalse;
 
  209     if (!img->fns->adjustPalette) 
return gFalse;
 
  210     return img->fns->adjustPalette(img, index, newColor);
 
  215 void *gdispImageAlloc(
gImage *img, gMemSize sz) {
 
  216     #if GDISP_NEED_IMAGE_ACCOUNTING 
  222             if (img->memused > img->maxmemused)
 
  223                 img->maxmemused = img->memused;
 
  232 void gdispImageFree(
gImage *img, 
void *ptr, gMemSize sz) {
 
  233     #if GDISP_NEED_IMAGE_ACCOUNTING 
  243 #if GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_LITTLE && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_BIG \ 
  244         && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_WBDWL && GFX_CPU_ENDIAN != GFX_CPU_ENDIAN_WLDWB 
  250     union dwbyteorder_u {
 
  255     gU16 gdispImageH16toLE16(gU16 w) {
 
  256         union wbyteorder_u  we;
 
  259         return   (((gU16)we.b[0]))|(((gU16)we.b[1]) << 8);
 
  261     gU16 gdispImageH16toBE16(gU16 w) {
 
  262         union wbyteorder_u  we;
 
  265         return   (((gU16)we.b[0]) << 8)|(((gU16)we.b[1]));
 
  268     gU32 gdispImageH32toLE32(gU32 dw) {
 
  269         union dwbyteorder_u we;
 
  272         return   (((gU32)we.b[0]))
 
  273                 |(((gU32)we.b[1]) << 8)
 
  274                 |(((gU32)we.b[2]) << 16)
 
  275                 |(((gU32)we.b[3]) << 24);
 
  277     gU32 gdispImageH32toBE32(gU32 dw) {
 
  278         union dwbyteorder_u we;
 
  281         return   (((gU32)we.b[0]) << 24)
 
  282                 |(((gU32)we.b[1]) << 16)
 
  283                 |(((gU32)we.b[2]) << 8)
 
GDISP image support routines header file.
COLOR_TYPE gColor
The color type definition.
gI16 gCoord
The type for a coordinate or length on the screen.
gBool gfileSetPos(GFILE *f, gFileSize pos)
Set the position of the read/write cursor.
void gfileClose(GFILE *f)
Close file.
struct GFILE GFILE
A file pointer.
void * gfxAlloc(gMemSize sz)
Allocate memory.
void gfxFree(void *ptr)
Free memory.
gdispImageError gdispImageCache(gImage *img)
Cache the image.
gdispImageError gdispImageOpenGFile(gImage *img, GFILE *f)
Open an image using an open GFILE and get it ready for drawing.
gBool gdispImageAdjustPalette(gImage *img, gU16 index, gColor newColor)
Modify an entry in the color palette.
gdispImageError gdispGImageDraw(GDisplay *g, gImage *img, gCoord x, gCoord y, gCoord cx, gCoord cy, gCoord sx, gCoord sy)
Draw the image.
gU16 gdispImageGetPaletteSize(gImage *img)
Get the number of entries in the color palette.
void gdispImageInit(gImage *img)
Initialise a gImage object.
gU16 gdispImageError
An image error code.
gDelay gdispImageNext(gImage *img)
Prepare for the next frame/page in the image file.
gBool gdispImageIsOpen(gImage *img)
Is an image open.
void gdispImageClose(gImage *img)
Close an image and release any dynamically allocated working storage.
void gdispImageSetBgColor(gImage *img, gColor bgcolor)
Set the background color of the image.
gColor gdispImageGetPalette(gImage *img, gU16 index)
Get an entry in the color palette.
The structure for an image.