]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/Image.c
MdeModulePkg/HiiDatabase: Update HiiImage to support PNG/JPEG
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / Image.c
index d73269cf7d1b5703e41b882d10e5444381e2034a..c8e9258ba67c217c39ab3bfee4010810b53620e3 100644 (file)
@@ -127,7 +127,12 @@ GetImageIdOrAddress (
       break;\r
 \r
     case EFI_HII_IIBT_IMAGE_JPEG:\r
-      Length = ReadUnaligned32 ((VOID *) &((EFI_HII_IIBT_JPEG_BLOCK *) CurrentImageBlock)->Size);\r
+      Length = OFFSET_OF (EFI_HII_IIBT_JPEG_BLOCK, Data) + ReadUnaligned32 ((VOID *) &((EFI_HII_IIBT_JPEG_BLOCK *) CurrentImageBlock)->Size);\r
+      ImageIdCurrent++;\r
+      break;\r
+\r
+    case EFI_HII_IIBT_IMAGE_PNG:\r
+      Length = OFFSET_OF (EFI_HII_IIBT_PNG_BLOCK, Data) + ReadUnaligned32 ((VOID *) &((EFI_HII_IIBT_PNG_BLOCK *) CurrentImageBlock)->Size);\r
       ImageIdCurrent++;\r
       break;\r
 \r
@@ -805,19 +810,16 @@ HiiGetImage (
   HII_DATABASE_PRIVATE_DATA           *Private;\r
   HII_DATABASE_PACKAGE_LIST_INSTANCE  *PackageListNode;\r
   HII_IMAGE_PACKAGE_INSTANCE          *ImagePackage;\r
-  UINT8                               *ImageBlock;\r
-  EFI_IMAGE_ID                        LocalImageId;\r
-  UINT8                               BlockType;\r
+  EFI_HII_IMAGE_BLOCK                 *CurrentImageBlock;\r
   EFI_HII_IIBT_IMAGE_1BIT_BLOCK       Iibt1bit;\r
   UINT16                              Width;\r
   UINT16                              Height;\r
   UINTN                               ImageLength;\r
-  BOOLEAN                             Flag;\r
   UINT8                               *PaletteInfo;\r
   UINT8                               PaletteIndex;\r
   UINT16                              PaletteSize;\r
 \r
-  if (This == NULL || Image == NULL || ImageId < 1) {\r
+  if (This == NULL || Image == NULL || ImageId == 0) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -838,26 +840,24 @@ HiiGetImage (
   //\r
   // Find the image block specified by ImageId\r
   //\r
-  LocalImageId = ImageId;\r
-  ImageBlock = (UINT8 *) GetImageIdOrAddress (ImagePackage->ImageBlock, &LocalImageId);\r
-  if (ImageBlock == NULL) {\r
+  CurrentImageBlock = GetImageIdOrAddress (ImagePackage->ImageBlock, &ImageId);\r
+  if (CurrentImageBlock == NULL) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  Flag      = FALSE;\r
-  BlockType = *ImageBlock;\r
-\r
-  switch (BlockType) {\r
+  switch (CurrentImageBlock->BlockType) {\r
   case EFI_HII_IIBT_IMAGE_JPEG:\r
+  case EFI_HII_IIBT_IMAGE_PNG:\r
     //\r
-    // BUGBUG: need to be supported as soon as image tool is designed.\r
+    // HiiImage protocol doesn't support return JPEG/PNG.\r
+    // Use HiiImageEx instead.\r
     //\r
     return EFI_UNSUPPORTED;\r
 \r
   case EFI_HII_IIBT_IMAGE_1BIT_TRANS:\r
   case EFI_HII_IIBT_IMAGE_4BIT_TRANS:\r
   case EFI_HII_IIBT_IMAGE_8BIT_TRANS:\r
-    Flag = TRUE;\r
+    Image->Flags = EFI_IMAGE_TRANSPARENT;\r
     //\r
     // fall through\r
     //\r
@@ -867,7 +867,7 @@ HiiGetImage (
     //\r
     // Use the common block code since the definition of these structures is the same.\r
     //\r
-    CopyMem (&Iibt1bit, ImageBlock, sizeof (EFI_HII_IIBT_IMAGE_1BIT_BLOCK));\r
+    CopyMem (&Iibt1bit, CurrentImageBlock, sizeof (EFI_HII_IIBT_IMAGE_1BIT_BLOCK));\r
     ImageLength = sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) *\r
                   (Iibt1bit.Bitmap.Width * Iibt1bit.Bitmap.Height);\r
     Image->Bitmap = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) AllocateZeroPool (ImageLength);\r
@@ -875,9 +875,6 @@ HiiGetImage (
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
-    if (Flag) {\r
-      Image->Flags = EFI_IMAGE_TRANSPARENT;\r
-    }\r
     Image->Width  = Iibt1bit.Bitmap.Width;\r
     Image->Height = Iibt1bit.Bitmap.Height;\r
 \r
@@ -891,22 +888,24 @@ HiiGetImage (
     //\r
     // Output bitmap data\r
     //\r
-    if (BlockType == EFI_HII_IIBT_IMAGE_1BIT || BlockType == EFI_HII_IIBT_IMAGE_1BIT_TRANS) {\r
+    if (CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_1BIT ||\r
+        CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_1BIT_TRANS) {\r
       Output1bitPixel (\r
         Image,\r
-        (UINT8 *) ((UINTN)ImageBlock + sizeof (EFI_HII_IIBT_IMAGE_1BIT_BLOCK) - sizeof (UINT8)),\r
+        ((EFI_HII_IIBT_IMAGE_1BIT_BLOCK *) CurrentImageBlock)->Bitmap.Data,\r
         (EFI_HII_IMAGE_PALETTE_INFO *) PaletteInfo\r
         );\r
-    } else if (BlockType == EFI_HII_IIBT_IMAGE_4BIT || BlockType == EFI_HII_IIBT_IMAGE_4BIT_TRANS) {\r
+    } else if (CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_4BIT ||\r
+               CurrentImageBlock->BlockType == EFI_HII_IIBT_IMAGE_4BIT_TRANS) {\r
       Output4bitPixel (\r
         Image,\r
-        (UINT8 *) ((UINTN)ImageBlock + sizeof (EFI_HII_IIBT_IMAGE_4BIT_BLOCK) - sizeof (UINT8)),\r
+        ((EFI_HII_IIBT_IMAGE_4BIT_BLOCK *) CurrentImageBlock)->Bitmap.Data,\r
         (EFI_HII_IMAGE_PALETTE_INFO *) PaletteInfo\r
         );\r
     } else {\r
       Output8bitPixel (\r
         Image,\r
-        (UINT8 *) ((UINTN)ImageBlock + sizeof (EFI_HII_IIBT_IMAGE_8BIT_BLOCK) - sizeof (UINT8)),\r
+        ((EFI_HII_IIBT_IMAGE_8BIT_BLOCK *) CurrentImageBlock)->Bitmap.Data,\r
         (EFI_HII_IMAGE_PALETTE_INFO *) PaletteInfo\r
         );\r
     }\r
@@ -914,35 +913,28 @@ HiiGetImage (
     return EFI_SUCCESS;\r
 \r
   case EFI_HII_IIBT_IMAGE_24BIT_TRANS:\r
-    Flag = TRUE;\r
+    Image->Flags = EFI_IMAGE_TRANSPARENT;\r
     //\r
     // fall through\r
     //\r
   case EFI_HII_IIBT_IMAGE_24BIT:\r
-    CopyMem (&Width, ImageBlock + sizeof (EFI_HII_IMAGE_BLOCK), sizeof (UINT16));\r
-    CopyMem (\r
-      &Height,\r
-      ImageBlock + sizeof (EFI_HII_IMAGE_BLOCK) + sizeof (UINT16),\r
-      sizeof (UINT16)\r
-      );\r
+    Width = ReadUnaligned16 ((VOID *) &((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) CurrentImageBlock)->Bitmap.Width);\r
+    Height = ReadUnaligned16 ((VOID *) &((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) CurrentImageBlock)->Bitmap.Height);\r
     ImageLength = sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) * (Width * Height);\r
-    Image->Bitmap = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) AllocateZeroPool (ImageLength);\r
+    Image->Bitmap = AllocateZeroPool (ImageLength);\r
     if (Image->Bitmap == NULL) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
-    if (Flag) {\r
-      Image->Flags = EFI_IMAGE_TRANSPARENT;\r
-    }\r
     Image->Width  = Width;\r
     Image->Height = Height;\r
 \r
     //\r
-    // Output the bimap data directly.\r
+    // Output the bitmap data directly.\r
     //\r
     Output24bitPixel (\r
       Image,\r
-      (EFI_HII_RGB_PIXEL *) (ImageBlock + sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL))\r
+      ((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) CurrentImageBlock)->Bitmap.Bitmap\r
       );\r
     return EFI_SUCCESS;\r
 \r
@@ -980,26 +972,15 @@ HiiSetImage (
   HII_DATABASE_PRIVATE_DATA           *Private;\r
   HII_DATABASE_PACKAGE_LIST_INSTANCE  *PackageListNode;\r
   HII_IMAGE_PACKAGE_INSTANCE          *ImagePackage;\r
-  UINT8                               *ImageBlock;\r
-  EFI_IMAGE_ID                        LocalImageId;\r
-  UINT8                               BlockType;\r
-  EFI_HII_IIBT_IMAGE_1BIT_BLOCK       Iibt1bit;\r
-  EFI_HII_IIBT_IMAGE_4BIT_BLOCK       Iibt4bit;\r
-  EFI_HII_IIBT_IMAGE_8BIT_BLOCK       Iibt8bit;\r
-  UINT16                              Width;\r
-  UINT16                              Height;\r
-  UINT32                              BlockSize;\r
+  EFI_HII_IMAGE_BLOCK                 *CurrentImageBlock;\r
+  EFI_HII_IMAGE_BLOCK                 *ImageBlocks;\r
+  EFI_HII_IMAGE_BLOCK                 *NewImageBlock;\r
   UINT32                              NewBlockSize;\r
   UINT32                              OldBlockSize;\r
-  EFI_IMAGE_INPUT                     *ImageIn;\r
-  UINT8                               *NewBlock;\r
-  UINT8                               *NewBlockPtr;\r
-  UINT8                               *Block;\r
-  UINT8                               *BlockPtr;\r
   UINT32                               Part1Size;\r
   UINT32                               Part2Size;\r
 \r
-  if (This == NULL || Image == NULL || ImageId < 1 || Image->Bitmap == NULL) {\r
+  if (This == NULL || Image == NULL || ImageId == 0 || Image->Bitmap == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -1020,53 +1001,53 @@ HiiSetImage (
   //\r
   // Find the image block specified by ImageId\r
   //\r
-  LocalImageId = ImageId;\r
-  ImageBlock = (UINT8 *) GetImageIdOrAddress (ImagePackage->ImageBlock, &LocalImageId);\r
-  if (ImageBlock == NULL) {\r
+  CurrentImageBlock = GetImageIdOrAddress (ImagePackage->ImageBlock, &ImageId);\r
+  if (CurrentImageBlock == NULL) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  BlockType = *ImageBlock;\r
-\r
   //\r
   // Get the size of original image block. Use some common block code here\r
   // since the definition of some structures is the same.\r
   //\r
-  switch (BlockType) {\r
+  switch (CurrentImageBlock->BlockType) {\r
   case EFI_HII_IIBT_IMAGE_JPEG:\r
-    //\r
-    // BUGBUG: need to be supported as soon as image tool is designed.\r
-    //\r
-    return EFI_UNSUPPORTED;\r
-\r
+    OldBlockSize = OFFSET_OF (EFI_HII_IIBT_JPEG_BLOCK, Data) + ReadUnaligned32 ((VOID *) &((EFI_HII_IIBT_JPEG_BLOCK *) CurrentImageBlock)->Size);\r
+    break;\r
+  case EFI_HII_IIBT_IMAGE_PNG:\r
+    OldBlockSize = OFFSET_OF (EFI_HII_IIBT_PNG_BLOCK, Data) + ReadUnaligned32 ((VOID *) &((EFI_HII_IIBT_PNG_BLOCK *) CurrentImageBlock)->Size);\r
+    break;\r
   case EFI_HII_IIBT_IMAGE_1BIT:\r
   case EFI_HII_IIBT_IMAGE_1BIT_TRANS:\r
-    CopyMem (&Iibt1bit, ImageBlock, sizeof (EFI_HII_IIBT_IMAGE_1BIT_BLOCK));\r
     OldBlockSize = sizeof (EFI_HII_IIBT_IMAGE_1BIT_BLOCK) - sizeof (UINT8) +\r
-                   BITMAP_LEN_1_BIT (Iibt1bit.Bitmap.Width, Iibt1bit.Bitmap.Height);\r
+                   BITMAP_LEN_1_BIT (\r
+                     ReadUnaligned16 (&((EFI_HII_IIBT_IMAGE_1BIT_BLOCK *) CurrentImageBlock)->Bitmap.Width),\r
+                     ReadUnaligned16 (&((EFI_HII_IIBT_IMAGE_1BIT_BLOCK *) CurrentImageBlock)->Bitmap.Height)\r
+                     );\r
     break;\r
   case EFI_HII_IIBT_IMAGE_4BIT:\r
   case EFI_HII_IIBT_IMAGE_4BIT_TRANS:\r
-    CopyMem (&Iibt4bit, ImageBlock, sizeof (EFI_HII_IIBT_IMAGE_4BIT_BLOCK));\r
     OldBlockSize = sizeof (EFI_HII_IIBT_IMAGE_4BIT_BLOCK) - sizeof (UINT8) +\r
-                   BITMAP_LEN_4_BIT (Iibt4bit.Bitmap.Width, Iibt4bit.Bitmap.Height);\r
+                   BITMAP_LEN_4_BIT (\r
+                     ReadUnaligned16 (&((EFI_HII_IIBT_IMAGE_4BIT_BLOCK *) CurrentImageBlock)->Bitmap.Width),\r
+                     ReadUnaligned16 (&((EFI_HII_IIBT_IMAGE_4BIT_BLOCK *) CurrentImageBlock)->Bitmap.Height)\r
+                     );\r
     break;\r
   case EFI_HII_IIBT_IMAGE_8BIT:\r
   case EFI_HII_IIBT_IMAGE_8BIT_TRANS:\r
-    CopyMem (&Iibt8bit, ImageBlock, sizeof (EFI_HII_IIBT_IMAGE_8BIT_BLOCK));\r
     OldBlockSize = sizeof (EFI_HII_IIBT_IMAGE_8BIT_BLOCK) - sizeof (UINT8) +\r
-                   BITMAP_LEN_8_BIT (Iibt8bit.Bitmap.Width, Iibt8bit.Bitmap.Height);\r
+                   BITMAP_LEN_8_BIT (\r
+                     ReadUnaligned16 (&((EFI_HII_IIBT_IMAGE_8BIT_BLOCK *) CurrentImageBlock)->Bitmap.Width),\r
+                     ReadUnaligned16 (&((EFI_HII_IIBT_IMAGE_8BIT_BLOCK *) CurrentImageBlock)->Bitmap.Height)\r
+                     );\r
     break;\r
   case EFI_HII_IIBT_IMAGE_24BIT:\r
   case EFI_HII_IIBT_IMAGE_24BIT_TRANS:\r
-    CopyMem (&Width, ImageBlock + sizeof (EFI_HII_IMAGE_BLOCK), sizeof (UINT16));\r
-    CopyMem (\r
-      &Height,\r
-      ImageBlock + sizeof (EFI_HII_IMAGE_BLOCK) + sizeof (UINT16),\r
-      sizeof (UINT16)\r
-      );\r
     OldBlockSize = sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL) +\r
-                   BITMAP_LEN_24_BIT (Width , Height);\r
+                   BITMAP_LEN_24_BIT (\r
+                     ReadUnaligned16 ((VOID *) &((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) CurrentImageBlock)->Bitmap.Width),\r
+                     ReadUnaligned16 ((VOID *) &((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) CurrentImageBlock)->Bitmap.Height)\r
+                     );\r
     break;\r
   default:\r
     return EFI_NOT_FOUND;\r
@@ -1075,53 +1056,40 @@ HiiSetImage (
   //\r
   // Create the new image block according to input image.\r
   //\r
-  ImageIn = (EFI_IMAGE_INPUT *) Image;\r
   NewBlockSize = sizeof (EFI_HII_IIBT_IMAGE_24BIT_BLOCK) - sizeof (EFI_HII_RGB_PIXEL) +\r
-                 BITMAP_LEN_24_BIT (ImageIn->Width, ImageIn->Height);\r
-  NewBlock = (UINT8 *) AllocateZeroPool (NewBlockSize);\r
-  if (NewBlock == NULL) {\r
+                 BITMAP_LEN_24_BIT (Image->Width, Image->Height);\r
+  //\r
+  // Adjust the image package to remove the original block firstly then add the new block.\r
+  //\r
+  ImageBlocks = AllocateZeroPool (ImagePackage->ImageBlockSize + NewBlockSize - OldBlockSize);\r
+  if (ImageBlocks == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  NewBlockPtr = NewBlock;\r
-  if ((ImageIn->Flags & EFI_IMAGE_TRANSPARENT) == EFI_IMAGE_TRANSPARENT) {\r
-    *NewBlockPtr = EFI_HII_IIBT_IMAGE_24BIT_TRANS;\r
-  } else {\r
-    *NewBlockPtr = EFI_HII_IIBT_IMAGE_24BIT;\r
-  }\r
-  NewBlockPtr++;\r
-\r
-  CopyMem (NewBlockPtr, &ImageIn->Width, sizeof (UINT16));\r
-  NewBlockPtr += sizeof (UINT16);\r
-  CopyMem (NewBlockPtr, &ImageIn->Height, sizeof (UINT16));\r
-  NewBlockPtr += sizeof (UINT16);\r
-\r
-  CopyGopToRgbPixel ((EFI_HII_RGB_PIXEL *) NewBlockPtr, ImageIn->Bitmap, ImageIn->Width * ImageIn->Height);\r
+  Part1Size = (UINT32) (UINTN) ((UINT8 *) CurrentImageBlock - (UINT8 *) ImagePackage->ImageBlock);\r
+  Part2Size = ImagePackage->ImageBlockSize - Part1Size - OldBlockSize;\r
+  CopyMem (ImageBlocks, ImagePackage->ImageBlock, Part1Size);\r
 \r
   //\r
-  // Adjust the image package to remove the original block firstly then add the new block.\r
+  // Set the new image block\r
   //\r
-  BlockSize = ImagePackage->ImageBlockSize + NewBlockSize - OldBlockSize;\r
-  Block = (UINT8 *) AllocateZeroPool (BlockSize);\r
-  if (Block == NULL) {\r
-    FreePool (NewBlock);\r
-    return EFI_OUT_OF_RESOURCES;\r
+  NewImageBlock = (EFI_HII_IMAGE_BLOCK *) ((UINT8 *) ImageBlocks + Part1Size);\r
+  if ((Image->Flags & EFI_IMAGE_TRANSPARENT) == EFI_IMAGE_TRANSPARENT) {\r
+    NewImageBlock->BlockType= EFI_HII_IIBT_IMAGE_24BIT_TRANS;\r
+  } else {\r
+    NewImageBlock->BlockType = EFI_HII_IIBT_IMAGE_24BIT;\r
   }\r
+  WriteUnaligned16 ((VOID *) &((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) NewImageBlock)->Bitmap.Width, Image->Width);\r
+  WriteUnaligned16 ((VOID *) &((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) NewImageBlock)->Bitmap.Height, Image->Height);\r
+  CopyGopToRgbPixel (((EFI_HII_IIBT_IMAGE_24BIT_BLOCK *) NewImageBlock)->Bitmap.Bitmap,\r
+                       Image->Bitmap, Image->Width * Image->Height);\r
 \r
-  BlockPtr  = Block;\r
-  Part1Size = (UINT32) (ImageBlock - (UINT8 *) ImagePackage->ImageBlock);\r
-  Part2Size = ImagePackage->ImageBlockSize - Part1Size - OldBlockSize;\r
-  CopyMem (BlockPtr, ImagePackage->ImageBlock, Part1Size);\r
-  BlockPtr += Part1Size;\r
-  CopyMem (BlockPtr, NewBlock, NewBlockSize);\r
-  BlockPtr += NewBlockSize;\r
-  CopyMem (BlockPtr, ImageBlock + OldBlockSize, Part2Size);\r
+  CopyMem ((UINT8 *) NewImageBlock + NewBlockSize, (UINT8 *) CurrentImageBlock + OldBlockSize, Part2Size);\r
 \r
   FreePool (ImagePackage->ImageBlock);\r
-  FreePool (NewBlock);\r
-  ImagePackage->ImageBlock     = (EFI_HII_IMAGE_BLOCK *) Block;\r
-  ImagePackage->ImageBlockSize = BlockSize;\r
-  ImagePackage->ImagePkgHdr.Header.Length += NewBlockSize - OldBlockSize;\r
+  ImagePackage->ImageBlock                       = ImageBlocks;\r
+  ImagePackage->ImageBlockSize                  += NewBlockSize - OldBlockSize;\r
+  ImagePackage->ImagePkgHdr.Header.Length       += NewBlockSize - OldBlockSize;\r
   PackageListNode->PackageListHdr.PackageLength += NewBlockSize - OldBlockSize;\r
 \r
   //\r
@@ -1178,7 +1146,6 @@ HiiDrawImage (
   EFI_STATUS                          Status;\r
   HII_DATABASE_PRIVATE_DATA           *Private;\r
   BOOLEAN                             Transparent;\r
-  EFI_IMAGE_INPUT                     *ImageIn;\r
   EFI_IMAGE_OUTPUT                    *ImageOut;\r
   EFI_GRAPHICS_OUTPUT_BLT_PIXEL       *BltBuffer;\r
   UINTN                               BufferLen;\r
@@ -1204,7 +1171,6 @@ HiiDrawImage (
   }\r
 \r
   FontInfo = NULL;\r
-  ImageIn = (EFI_IMAGE_INPUT *) Image;\r
 \r
   //\r
   // Check whether the image will be drawn transparently or opaquely.\r
@@ -1219,7 +1185,7 @@ HiiDrawImage (
     // Now EFI_HII_DRAW_FLAG_DEFAULT is set, whether image will be drawn depending\r
     // on the image's transparency setting.\r
     //\r
-    if ((ImageIn->Flags & EFI_IMAGE_TRANSPARENT) == EFI_IMAGE_TRANSPARENT) {\r
+    if ((Image->Flags & EFI_IMAGE_TRANSPARENT) == EFI_IMAGE_TRANSPARENT) {\r
       Transparent = TRUE;\r
     }\r
   }\r
@@ -1248,8 +1214,8 @@ HiiDrawImage (
     // Clip the image by (Width, Height)\r
     //\r
 \r
-    Width  = ImageIn->Width;\r
-    Height = ImageIn->Height;\r
+    Width  = Image->Width;\r
+    Height = Image->Height;\r
 \r
     if (Width > (*Blt)->Width - BltX) {\r
       Width = (*Blt)->Width - BltX;\r
@@ -1264,14 +1230,14 @@ HiiDrawImage (
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
-    if (Width == ImageIn->Width && Height == ImageIn->Height) {\r
-      CopyMem (BltBuffer, ImageIn->Bitmap, BufferLen);\r
+    if (Width == Image->Width && Height == Image->Height) {\r
+      CopyMem (BltBuffer, Image->Bitmap, BufferLen);\r
     } else {\r
       for (Ypos = 0; Ypos < Height; Ypos++) {\r
-        OffsetY1 = ImageIn->Width * Ypos;\r
+        OffsetY1 = Image->Width * Ypos;\r
         OffsetY2 = Width * Ypos;\r
         for (Xpos = 0; Xpos < Width; Xpos++) {\r
-          BltBuffer[OffsetY2 + Xpos] = ImageIn->Bitmap[OffsetY1 + Xpos];\r
+          BltBuffer[OffsetY2 + Xpos] = Image->Bitmap[OffsetY1 + Xpos];\r
         }\r
       }\r
     }\r
@@ -1322,8 +1288,8 @@ HiiDrawImage (
     //\r
     // Allocate a new bitmap to hold the incoming image.\r
     //\r
-    Width  = ImageIn->Width  + BltX;\r
-    Height = ImageIn->Height + BltY;\r
+    Width  = Image->Width  + BltX;\r
+    Height = Image->Height + BltY;\r
 \r
     BufferLen = Width * Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);\r
     BltBuffer = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) AllocateZeroPool (BufferLen);\r
@@ -1361,11 +1327,11 @@ HiiDrawImage (
     //\r
     *Blt = ImageOut;\r
     return ImageToBlt (\r
-             ImageIn->Bitmap,\r
+             Image->Bitmap,\r
              BltX,\r
              BltY,\r
-             ImageIn->Width,\r
-             ImageIn->Height,\r
+             Image->Width,\r
+             Image->Height,\r
              Transparent,\r
              Blt\r
              );\r