12#define MAX_UINT24 0xFFFFFF
31 IN OUT EFI_IMAGE_ID *ImageId
34 EFI_IMAGE_ID ImageIdCurrent;
38 ASSERT (ImageBlocks !=
NULL && ImageId !=
NULL);
39 CurrentImageBlock = ImageBlocks;
42 while (CurrentImageBlock->BlockType != EFI_HII_IIBT_END) {
44 if (*ImageId == ImageIdCurrent) {
49 if (CurrentImageBlock->BlockType == EFI_HII_IIBT_DUPLICATE) {
51 ASSERT (*ImageId != ImageIdCurrent);
52 ASSERT (*ImageId != 0);
53 CurrentImageBlock = ImageBlocks;
58 return CurrentImageBlock;
61 if (*ImageId < ImageIdCurrent) {
69 switch (CurrentImageBlock->BlockType) {
70 case EFI_HII_IIBT_EXT1:
73 case EFI_HII_IIBT_EXT2:
76 case EFI_HII_IIBT_EXT4:
80 case EFI_HII_IIBT_IMAGE_1BIT:
81 case EFI_HII_IIBT_IMAGE_1BIT_TRANS:
90 case EFI_HII_IIBT_IMAGE_4BIT:
91 case EFI_HII_IIBT_IMAGE_4BIT_TRANS:
100 case EFI_HII_IIBT_IMAGE_8BIT:
101 case EFI_HII_IIBT_IMAGE_8BIT_TRANS:
110 case EFI_HII_IIBT_IMAGE_24BIT:
111 case EFI_HII_IIBT_IMAGE_24BIT_TRANS:
120 case EFI_HII_IIBT_DUPLICATE:
125 case EFI_HII_IIBT_IMAGE_JPEG:
130 case EFI_HII_IIBT_IMAGE_PNG:
135 case EFI_HII_IIBT_SKIP1:
140 case EFI_HII_IIBT_SKIP2:
161 *ImageId = ImageIdCurrent;
162 return CurrentImageBlock;
189 ASSERT (BitMapOut !=
NULL && BitMapIn !=
NULL);
191 for (Index = 0; Index < PixelNum; Index++) {
217 ASSERT (BitMapOut !=
NULL && BitMapIn !=
NULL);
219 for (Index = 0; Index < PixelNum; Index++) {
255 ASSERT (Image !=
NULL && Data !=
NULL && PaletteInfo !=
NULL);
257 BitMapPtr = Image->Bitmap;
263 CopyMem (&PaletteSize, PaletteInfo,
sizeof (UINT16));
264 PaletteSize +=
sizeof (UINT16);
266 ASSERT (Palette !=
NULL);
267 if (Palette ==
NULL) {
271 CopyMem (Palette, PaletteInfo, PaletteSize);
273 ZeroMem (PaletteValue,
sizeof (PaletteValue));
281 for (Ypos = 0; Ypos < Image->Height; Ypos++) {
282 OffsetY = BITMAP_LEN_1_BIT (Image->Width, Ypos);
286 for (Xpos = 0; Xpos < Image->Width / 8; Xpos++) {
287 Byte = *(Data + OffsetY + Xpos);
288 for (Index = 0; Index < 8; Index++) {
289 if ((Byte & (1 << Index)) != 0) {
290 BitMapPtr[Ypos * Image->Width + Xpos * 8 + (8 - Index - 1)] = PaletteValue[1];
292 BitMapPtr[Ypos * Image->Width + Xpos * 8 + (8 - Index - 1)] = PaletteValue[0];
297 if (Image->Width % 8 != 0) {
301 Byte = *(Data + OffsetY + Xpos);
302 for (Index = 0; Index < Image->Width % 8; Index++) {
303 if ((Byte & (1 << (8 - Index - 1))) != 0) {
304 BitMapPtr[Ypos * Image->Width + Xpos * 8 + Index] = PaletteValue[1];
306 BitMapPtr[Ypos * Image->Width + Xpos * 8 + Index] = PaletteValue[0];
344 ASSERT (Image !=
NULL && Data !=
NULL && PaletteInfo !=
NULL);
346 BitMapPtr = Image->Bitmap;
352 CopyMem (&PaletteSize, PaletteInfo,
sizeof (UINT16));
353 PaletteSize +=
sizeof (UINT16);
355 ASSERT (Palette !=
NULL);
356 if (Palette ==
NULL) {
360 CopyMem (Palette, PaletteInfo, PaletteSize);
363 ZeroMem (PaletteValue,
sizeof (PaletteValue));
370 for (Ypos = 0; Ypos < Image->Height; Ypos++) {
371 OffsetY = BITMAP_LEN_4_BIT (Image->Width, Ypos);
375 for (Xpos = 0; Xpos < Image->Width / 2; Xpos++) {
376 Byte = *(Data + OffsetY + Xpos);
377 BitMapPtr[Ypos * Image->Width + Xpos * 2] = PaletteValue[Byte >> 4];
378 BitMapPtr[Ypos * Image->Width + Xpos * 2 + 1] = PaletteValue[Byte & 0x0F];
381 if (Image->Width % 2 != 0) {
385 Byte = *(Data + OffsetY + Xpos);
386 BitMapPtr[Ypos * Image->Width + Xpos * 2] = PaletteValue[Byte >> 4];
422 ASSERT (Image !=
NULL && Data !=
NULL && PaletteInfo !=
NULL);
424 BitMapPtr = Image->Bitmap;
430 CopyMem (&PaletteSize, PaletteInfo,
sizeof (UINT16));
431 PaletteSize +=
sizeof (UINT16);
433 ASSERT (Palette !=
NULL);
434 if (Palette ==
NULL) {
438 CopyMem (Palette, PaletteInfo, PaletteSize);
440 ZeroMem (PaletteValue,
sizeof (PaletteValue));
447 for (Ypos = 0; Ypos < Image->Height; Ypos++) {
448 OffsetY = BITMAP_LEN_8_BIT ((UINT32)Image->Width, Ypos);
452 for (Xpos = 0; Xpos < Image->Width; Xpos++) {
453 Byte = *(Data + OffsetY + Xpos);
454 BitMapPtr[OffsetY + Xpos] = PaletteValue[Byte];
481 ASSERT (Image !=
NULL && Data !=
NULL);
483 BitMapPtr = Image->Bitmap;
485 for (Ypos = 0; Ypos < Image->Height; Ypos++) {
486 OffsetY = BITMAP_LEN_8_BIT ((UINT32)Image->Width, Ypos);
520 IN BOOLEAN Transparent,
532 if ((BltBuffer ==
NULL) || (Blt ==
NULL) || (*Blt ==
NULL)) {
533 return EFI_INVALID_PARAMETER;
538 if (Width + BltX > ImageOut->Width) {
539 return EFI_INVALID_PARAMETER;
542 if (Height + BltY > ImageOut->Height) {
543 return EFI_INVALID_PARAMETER;
548 for (Ypos = 0; Ypos < Height; Ypos++) {
549 OffsetY1 = Width * Ypos;
550 OffsetY2 = ImageOut->Width * (BltY + Ypos);
551 for (Xpos = 0; Xpos < Width; Xpos++) {
552 SrcPixel = BltBuffer[OffsetY1 + Xpos];
554 if (
CompareMem (&SrcPixel, &ZeroPixel, 3) != 0) {
555 ImageOut->Image.Bitmap[OffsetY2 + BltX + Xpos] = SrcPixel;
558 ImageOut->Image.Bitmap[OffsetY2 + BltX + Xpos] = SrcPixel;
592 if (Record->Handle == PackageList) {
593 return Record->PackageList;
623 OUT EFI_IMAGE_ID *ImageId,
633 if ((This ==
NULL) || (ImageId ==
NULL) || (Image ==
NULL) || (Image->Bitmap ==
NULL)) {
634 return EFI_INVALID_PARAMETER;
637 Private = HII_IMAGE_DATABASE_PRIVATE_DATA_FROM_THIS (This);
639 if (PackageListNode ==
NULL) {
640 return EFI_NOT_FOUND;
650 NewBlockSize = (UINT32)Image->Width * Image->Height;
653 return EFI_OUT_OF_RESOURCES;
662 if (PackageListNode->ImagePkg !=
NULL) {
663 ImagePackage = PackageListNode->ImagePkg;
680 if (NewBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length) {
682 return EFI_OUT_OF_RESOURCES;
689 ImageBlocks =
AllocatePool (ImagePackage->ImageBlockSize + NewBlockSize);
690 if (ImageBlocks ==
NULL) {
692 return EFI_OUT_OF_RESOURCES;
700 ImagePackage->ImageBlock,
703 FreePool (ImagePackage->ImageBlock);
704 ImagePackage->ImageBlock = ImageBlocks;
715 ImagePackage->ImageBlockSize += NewBlockSize;
716 ImagePackage->ImagePkgHdr.Header.Length += NewBlockSize;
717 PackageListNode->PackageListHdr.PackageLength += NewBlockSize;
725 return EFI_OUT_OF_RESOURCES;
733 if (ImagePackage ==
NULL) {
735 return EFI_OUT_OF_RESOURCES;
747 ImagePackage->ImagePkgHdr.Header.Type = EFI_HII_PACKAGE_IMAGES;
749 ImagePackage->ImagePkgHdr.PaletteInfoOffset = 0;
754 ImagePackage->PaletteBlock =
NULL;
755 ImagePackage->PaletteInfoSize = 0;
762 if (ImagePackage->ImageBlock ==
NULL) {
765 return EFI_OUT_OF_RESOURCES;
768 ImageBlocks = ImagePackage->ImageBlock;
773 PackageListNode->ImagePkg = ImagePackage;
774 PackageListNode->PackageListHdr.PackageLength += ImagePackage->ImagePkgHdr.Header.Length;
781 ImageBlocks->BlockType = EFI_HII_IIBT_IMAGE_24BIT_TRANS;
783 ImageBlocks->BlockType = EFI_HII_IIBT_IMAGE_24BIT;
794 ImageBlocks->BlockType = EFI_HII_IIBT_END;
800 if (gExportAfterReadyToBoot) {
835 IN EFI_IMAGE_ID ImageId,
837 IN BOOLEAN BitmapOnly
854 if ((Image ==
NULL) || (ImageId == 0)) {
855 return EFI_INVALID_PARAMETER;
859 if (PackageListNode ==
NULL) {
860 return EFI_NOT_FOUND;
863 ImagePackage = PackageListNode->ImagePkg;
864 if (ImagePackage ==
NULL) {
865 return EFI_NOT_FOUND;
872 if (CurrentImageBlock ==
NULL) {
873 return EFI_NOT_FOUND;
877 switch (CurrentImageBlock->BlockType) {
878 case EFI_HII_IIBT_IMAGE_JPEG:
879 case EFI_HII_IIBT_IMAGE_PNG:
881 return EFI_UNSUPPORTED;
886 if (Decoder ==
NULL) {
887 return EFI_UNSUPPORTED;
903 Status = Decoder->DecodeImage (
915 if (!EFI_ERROR (Status)) {
916 Image->Bitmap = ImageOut->Image.Bitmap;
917 Image->Height = ImageOut->Height;
918 Image->Width = ImageOut->Width;
924 case EFI_HII_IIBT_IMAGE_1BIT_TRANS:
925 case EFI_HII_IIBT_IMAGE_4BIT_TRANS:
926 case EFI_HII_IIBT_IMAGE_8BIT_TRANS:
931 case EFI_HII_IIBT_IMAGE_1BIT:
932 case EFI_HII_IIBT_IMAGE_4BIT:
933 case EFI_HII_IIBT_IMAGE_8BIT:
938 ImageLength = (
UINTN)Iibt1bit.Bitmap.Width * Iibt1bit.Bitmap.Height;
940 return EFI_OUT_OF_RESOURCES;
945 if (Image->Bitmap ==
NULL) {
946 return EFI_OUT_OF_RESOURCES;
949 Image->Width = Iibt1bit.Bitmap.Width;
950 Image->Height = Iibt1bit.Bitmap.Height;
953 for (PaletteIndex = 1; PaletteIndex < Iibt1bit.PaletteIndex; PaletteIndex++) {
954 CopyMem (&PaletteSize, PaletteInfo,
sizeof (UINT16));
955 PaletteInfo += PaletteSize +
sizeof (UINT16);
958 ASSERT (PaletteIndex == Iibt1bit.PaletteIndex);
963 if ((CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_1BIT) ||
964 (CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_1BIT_TRANS))
971 }
else if ((CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_4BIT) ||
972 (CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_4BIT_TRANS))
989 case EFI_HII_IIBT_IMAGE_24BIT_TRANS:
994 case EFI_HII_IIBT_IMAGE_24BIT:
997 ImageLength = (
UINTN)Width * Height;
999 return EFI_OUT_OF_RESOURCES;
1004 if (Image->Bitmap ==
NULL) {
1005 return EFI_OUT_OF_RESOURCES;
1008 Image->Width = Width;
1009 Image->Height = Height;
1021 return EFI_NOT_FOUND;
1051 IN EFI_IMAGE_ID ImageId,
1057 Private = HII_IMAGE_DATABASE_PRIVATE_DATA_FROM_THIS (This);
1058 return IGetImage (&Private->DatabaseList, PackageList, ImageId, Image,
TRUE);
1082 IN EFI_IMAGE_ID ImageId,
1092 UINT32 NewBlockSize;
1093 UINT32 OldBlockSize;
1097 if ((This ==
NULL) || (Image ==
NULL) || (ImageId == 0) || (Image->Bitmap ==
NULL)) {
1098 return EFI_INVALID_PARAMETER;
1101 Private = HII_IMAGE_DATABASE_PRIVATE_DATA_FROM_THIS (This);
1103 if (PackageListNode ==
NULL) {
1104 return EFI_NOT_FOUND;
1107 ImagePackage = PackageListNode->ImagePkg;
1108 if (ImagePackage ==
NULL) {
1109 return EFI_NOT_FOUND;
1116 if (CurrentImageBlock ==
NULL) {
1117 return EFI_NOT_FOUND;
1126 switch (CurrentImageBlock->BlockType) {
1127 case EFI_HII_IIBT_IMAGE_JPEG:
1130 case EFI_HII_IIBT_IMAGE_PNG:
1133 case EFI_HII_IIBT_IMAGE_1BIT:
1134 case EFI_HII_IIBT_IMAGE_1BIT_TRANS:
1141 case EFI_HII_IIBT_IMAGE_4BIT:
1142 case EFI_HII_IIBT_IMAGE_4BIT_TRANS:
1149 case EFI_HII_IIBT_IMAGE_8BIT:
1150 case EFI_HII_IIBT_IMAGE_8BIT_TRANS:
1157 case EFI_HII_IIBT_IMAGE_24BIT:
1158 case EFI_HII_IIBT_IMAGE_24BIT_TRANS:
1167 return EFI_NOT_FOUND;
1179 NewBlockSize = (UINT32)Image->Width * Image->Height;
1182 return EFI_OUT_OF_RESOURCES;
1186 if ((NewBlockSize > OldBlockSize) &&
1187 (NewBlockSize - OldBlockSize > MAX_UINT24 - ImagePackage->ImagePkgHdr.Header.Length)
1191 return EFI_OUT_OF_RESOURCES;
1197 ImageBlocks =
AllocateZeroPool (ImagePackage->ImageBlockSize + NewBlockSize - OldBlockSize);
1198 if (ImageBlocks ==
NULL) {
1200 return EFI_OUT_OF_RESOURCES;
1203 Part1Size = (UINT32)((
UINTN)CurrentImageBlock - (
UINTN)ImagePackage->ImageBlock);
1204 Part2Size = ImagePackage->ImageBlockSize - Part1Size - OldBlockSize;
1205 CopyMem (ImageBlocks, ImagePackage->ImageBlock, Part1Size);
1212 NewImageBlock->BlockType = EFI_HII_IIBT_IMAGE_24BIT_TRANS;
1214 NewImageBlock->BlockType = EFI_HII_IIBT_IMAGE_24BIT;
1222 (UINT32)Image->Width * Image->Height
1225 CopyMem ((UINT8 *)NewImageBlock + NewBlockSize, (UINT8 *)CurrentImageBlock + OldBlockSize, Part2Size);
1227 FreePool (ImagePackage->ImageBlock);
1228 ImagePackage->ImageBlock = ImageBlocks;
1229 ImagePackage->ImageBlockSize += NewBlockSize - OldBlockSize;
1230 ImagePackage->ImagePkgHdr.Header.Length += NewBlockSize - OldBlockSize;
1231 PackageListNode->PackageListHdr.PackageLength += NewBlockSize - OldBlockSize;
1237 if (gExportAfterReadyToBoot) {
1285 BOOLEAN Transparent;
1297 if ((This ==
NULL) || (Image ==
NULL) || (Blt ==
NULL)) {
1298 return EFI_INVALID_PARAMETER;
1301 if (((Flags & EFI_HII_DRAW_FLAG_CLIP) == EFI_HII_DRAW_FLAG_CLIP) && (*Blt ==
NULL)) {
1302 return EFI_INVALID_PARAMETER;
1305 if ((Flags & EFI_HII_DRAW_FLAG_TRANSPARENT) == EFI_HII_DRAW_FLAG_TRANSPARENT) {
1306 return EFI_INVALID_PARAMETER;
1314 Transparent =
FALSE;
1315 if ((Flags & EFI_HII_DRAW_FLAG_TRANSPARENT) == EFI_HII_DRAW_FLAG_FORCE_TRANS) {
1317 }
else if ((Flags & EFI_HII_DRAW_FLAG_TRANSPARENT) == EFI_HII_DRAW_FLAG_FORCE_OPAQUE) {
1318 Transparent =
FALSE;
1335 return EFI_INVALID_PARAMETER;
1336 }
else if ((Flags & EFI_HII_DIRECT_TO_SCREEN) == EFI_HII_DIRECT_TO_SCREEN) {
1337 return EFI_INVALID_PARAMETER;
1341 Private = HII_IMAGE_DATABASE_PRIVATE_DATA_FROM_THIS (This);
1352 if ((BltX >= (*Blt)->Width) || (BltY >= (*Blt)->Height)) {
1353 return EFI_INVALID_PARAMETER;
1360 Width = Image->Width;
1361 Height = Image->Height;
1363 if (Width > (*Blt)->Width - (UINT16)BltX) {
1364 Width = (*Blt)->Width - (UINT16)BltX;
1367 if (Height > (*Blt)->Height - (UINT16)BltY) {
1368 Height = (*Blt)->Height - (UINT16)BltY;
1375 BufferLen = Width * Height;
1377 return EFI_OUT_OF_RESOURCES;
1382 if (BltBuffer ==
NULL) {
1383 return EFI_OUT_OF_RESOURCES;
1386 if ((Width == Image->Width) && (Height == Image->Height)) {
1387 CopyMem (BltBuffer, Image->Bitmap, BufferLen);
1389 for (Ypos = 0; Ypos < Height; Ypos++) {
1390 OffsetY1 = Image->Width * Ypos;
1391 OffsetY2 = Width * Ypos;
1393 &BltBuffer[OffsetY2],
1394 &Image->Bitmap[OffsetY1],
1395 Width * sizeof (*BltBuffer)
1403 if ((Flags & EFI_HII_DIRECT_TO_SCREEN) == EFI_HII_DIRECT_TO_SCREEN) {
1411 Status = (*Blt)->Image.Screen->Blt (
1412 (*Blt)->Image.Screen,
1448 if ((BltX > (
UINTN)MAX_UINT16 - Image->Width) || (BltY > (
UINTN)MAX_UINT16 - Image->Height)) {
1449 return EFI_INVALID_PARAMETER;
1452 Width = Image->Width + (UINT16)BltX;
1453 Height = Image->Height + (UINT16)BltY;
1458 BufferLen = Width * Height;
1460 return EFI_OUT_OF_RESOURCES;
1465 if (BltBuffer ==
NULL) {
1466 return EFI_OUT_OF_RESOURCES;
1470 if (ImageOut ==
NULL) {
1472 return EFI_OUT_OF_RESOURCES;
1475 ImageOut->Width = Width;
1476 ImageOut->Height = Height;
1477 ImageOut->Image.Bitmap = BltBuffer;
1484 if (EFI_ERROR (Status)) {
1490 ASSERT (FontInfo !=
NULL);
1491 for (Index = 0; Index < (
UINTN)Width * Height; Index++) {
1492 BltBuffer[Index] = FontInfo->BackgroundColor;
1551 IN EFI_IMAGE_ID ImageId,
1563 if ((This ==
NULL) || (Blt ==
NULL)) {
1564 return EFI_INVALID_PARAMETER;
1570 Status =
HiiGetImage (This, PackageList, ImageId, &Image);
1571 if (EFI_ERROR (Status)) {
1578 Status =
HiiDrawImage (This, Flags, &Image, Blt, BltX, BltY);
1579 if (Image.Bitmap !=
NULL) {
BOOLEAN EFIAPI IsNull(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
LIST_ENTRY *EFIAPI GetNextNode(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
LIST_ENTRY *EFIAPI GetFirstNode(IN CONST LIST_ENTRY *List)
UINT16 EFIAPI ReadUnaligned16(IN CONST UINT16 *Buffer)
UINT16 EFIAPI WriteUnaligned16(OUT UINT16 *Buffer, IN UINT16 Value)
UINT32 EFIAPI ReadUnaligned32(IN CONST UINT32 *Buffer)
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_STATUS HiiGetDatabaseInfo(IN CONST EFI_HII_DATABASE_PROTOCOL *This)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
EFI_STATUS GetSystemFont(IN HII_DATABASE_PRIVATE_DATA *Private, OUT EFI_FONT_DISPLAY_INFO **FontInfo, OUT UINTN *FontInfoSize OPTIONAL)
UINT32 EFI_HII_DRAW_FLAGS
#define EFI_IMAGE_TRANSPARENT
EFI_HII_IMAGE_DECODER_PROTOCOL * LocateHiiImageDecoder(UINT8 BlockType)
#define ARRAY_SIZE(Array)
#define OFFSET_OF(TYPE, Field)
#define CR(Record, TYPE, Field, TestSignature)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
VOID EFIAPI EfiReleaseLock(IN EFI_LOCK *Lock)
VOID EFIAPI EfiAcquireLock(IN EFI_LOCK *Lock)
VOID Output4bitPixel(IN OUT EFI_IMAGE_INPUT *Image, IN UINT8 *Data, IN EFI_HII_IMAGE_PALETTE_INFO *PaletteInfo)
EFI_HII_IMAGE_BLOCK * GetImageIdOrAddress(IN EFI_HII_IMAGE_BLOCK *ImageBlocks, IN OUT EFI_IMAGE_ID *ImageId)
VOID Output1bitPixel(IN OUT EFI_IMAGE_INPUT *Image, IN UINT8 *Data, IN EFI_HII_IMAGE_PALETTE_INFO *PaletteInfo)
EFI_STATUS IGetImage(IN LIST_ENTRY *Database, IN EFI_HII_HANDLE PackageList, IN EFI_IMAGE_ID ImageId, OUT EFI_IMAGE_INPUT *Image, IN BOOLEAN BitmapOnly)
EFI_STATUS ImageToBlt(IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, IN UINTN BltX, IN UINTN BltY, IN UINTN Width, IN UINTN Height, IN BOOLEAN Transparent, IN OUT EFI_IMAGE_OUTPUT **Blt)
VOID Output8bitPixel(IN OUT EFI_IMAGE_INPUT *Image, IN UINT8 *Data, IN EFI_HII_IMAGE_PALETTE_INFO *PaletteInfo)
VOID CopyGopToRgbPixel(OUT EFI_HII_RGB_PIXEL *BitMapOut, IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BitMapIn, IN UINTN PixelNum)
HII_DATABASE_PACKAGE_LIST_INSTANCE * LocatePackageList(IN LIST_ENTRY *Database, IN EFI_HII_HANDLE PackageList)
VOID CopyRgbToGopPixel(OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BitMapOut, IN EFI_HII_RGB_PIXEL *BitMapIn, IN UINTN PixelNum)
EFI_STATUS EFIAPI HiiDrawImage(IN CONST EFI_HII_IMAGE_PROTOCOL *This, IN EFI_HII_DRAW_FLAGS Flags, IN CONST EFI_IMAGE_INPUT *Image, IN OUT EFI_IMAGE_OUTPUT **Blt, IN UINTN BltX, IN UINTN BltY)
VOID Output24bitPixel(IN OUT EFI_IMAGE_INPUT *Image, IN EFI_HII_RGB_PIXEL *Data)
EFI_STATUS EFIAPI HiiDrawImageId(IN CONST EFI_HII_IMAGE_PROTOCOL *This, IN EFI_HII_DRAW_FLAGS Flags, IN EFI_HII_HANDLE PackageList, IN EFI_IMAGE_ID ImageId, IN OUT EFI_IMAGE_OUTPUT **Blt, IN UINTN BltX, IN UINTN BltY)
EFI_STATUS EFIAPI HiiNewImage(IN CONST EFI_HII_IMAGE_PROTOCOL *This, IN EFI_HII_HANDLE PackageList, OUT EFI_IMAGE_ID *ImageId, IN CONST EFI_IMAGE_INPUT *Image)
EFI_STATUS EFIAPI HiiGetImage(IN CONST EFI_HII_IMAGE_PROTOCOL *This, IN EFI_HII_HANDLE PackageList, IN EFI_IMAGE_ID ImageId, OUT EFI_IMAGE_INPUT *Image)
EFI_STATUS EFIAPI HiiSetImage(IN CONST EFI_HII_IMAGE_PROTOCOL *This, IN EFI_HII_HANDLE PackageList, IN EFI_IMAGE_ID ImageId, IN CONST EFI_IMAGE_INPUT *Image)