// BMP structures
+#ifdef __MAKEWITH_GNUEFI
#pragma pack(1)
typedef struct {
} BMP_IMAGE_HEADER;
#pragma pack()
+#endif
//
// Load BMP image
UINT8 ImageValue = 0, AlphaValue;
EG_PIXEL *PixelPtr;
UINTN Index, BitIndex;
-
+
// read and check header
if (FileDataLength < sizeof(BMP_IMAGE_HEADER) || FileData == NULL)
return NULL;
if (BmpHeader->BitPerPixel != 1 && BmpHeader->BitPerPixel != 4 &&
BmpHeader->BitPerPixel != 8 && BmpHeader->BitPerPixel != 24)
return NULL;
-
+
// calculate parameters
ImageLineOffset = BmpHeader->PixelWidth;
if (BmpHeader->BitPerPixel == 24)
// check bounds
if (BmpHeader->ImageOffset + ImageLineOffset * BmpHeader->PixelHeight > FileDataLength)
return NULL;
-
+
// allocate image structure and buffer
NewImage = egCreateImage(BmpHeader->PixelWidth, BmpHeader->PixelHeight, WantAlpha);
if (NewImage == NULL)
return NULL;
AlphaValue = WantAlpha ? 255 : 0;
-
+
// convert image
BmpColorMap = (BMP_COLOR_MAP *)(FileData + sizeof(BMP_IMAGE_HEADER));
ImagePtrBase = FileData + BmpHeader->ImageOffset;