-
-
-typedef struct _lode_color {
- UINT8 red;
- UINT8 green;
- UINT8 blue;
- UINT8 alpha;
-} lode_color;
-
-EG_IMAGE * egDecodePNG(IN UINT8 *FileData, IN UINTN FileDataLength, IN UINTN IconSize, IN BOOLEAN WantAlpha) {
- EG_IMAGE *NewImage = NULL;
- unsigned Error, Width, Height;
- EG_PIXEL *PixelData;
- lode_color *LodeData;
- UINTN i;
-
- Error = lodepng_decode_memory((unsigned char **) &PixelData, &Width, &Height, (unsigned char*) FileData,
- (size_t) FileDataLength, LCT_RGBA, 8);
-
- if (Error) {
- return NULL;
- }
-
- // allocate image structure and buffer
- NewImage = egCreateImage(Width, Height, WantAlpha);
- if ((NewImage == NULL) || (NewImage->Width != Width) || (NewImage->Height != Height))
- return NULL;
-
- LodeData = (lode_color *) PixelData;
- for (i = 0; i < (NewImage->Height * NewImage->Width); i++) {
- NewImage->PixelData[i].r = LodeData[i].red;
- NewImage->PixelData[i].g = LodeData[i].green;
- NewImage->PixelData[i].b = LodeData[i].blue;
- if (WantAlpha)
- NewImage->PixelData[i].a = LodeData[i].alpha;
- }
- myfree(PixelData);
-
- return NewImage;
-} // EG_IMAGE * egDecodePNG()