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.