EFI_STATUS GetAndDisplayBitmap()

in OemPkg/FrontPage/FrontPage.c [1687:1745]


EFI_STATUS  GetAndDisplayBitmap (EFI_GUID *FileGuid, UINTN XCoord, BOOLEAN XCoordAdj) {
    EFI_STATUS                       Status;
    UINT8                           *BMPData          = NULL;
    UINTN                            BMPDataSize      = 0;
    EFI_GRAPHICS_OUTPUT_BLT_PIXEL   *BltBuffer        = NULL;
    UINTN                            BltBufferSize;
    UINTN                            BitmapHeight;
    UINTN                            BitmapWidth;

    // Get the specified image from FV.
    //
    Status = GetSectionFromAnyFv(FileGuid,
                                 EFI_SECTION_RAW,
                                 0,
                                 (VOID **)&BMPData,
                                 &BMPDataSize
                                );

    if (EFI_ERROR(Status)) {
        DEBUG((DEBUG_ERROR, "ERROR [DE]: Failed to find bitmap file (GUID=%g) (%r).\r\n", FileGuid, Status));
        return Status;
    }

    // Convert the bitmap from BMP format to a GOP framebuffer-compatible form.
    //
    Status = TranslateBmpToGopBlt(BMPData,
                                BMPDataSize,
                                &BltBuffer,
                                &BltBufferSize,
                                &BitmapHeight,
                                &BitmapWidth
                               );
    if (EFI_ERROR(Status)) {
        FreePool(BMPData);
        DEBUG((DEBUG_ERROR, "ERROR [DE]: Failed to convert bitmap file to GOP format (%r).\r\n", Status));
        return Status;
    }

    if (XCoordAdj == TRUE)
    {
       XCoord -= BitmapWidth;
    }

    mGop->Blt(mGop,
              BltBuffer,
              EfiBltBufferToVideo,
              0,
              0,
              XCoord,   //Upper Right corner
              ((mTitleBarHeight / 2) - (BitmapHeight / 2)),
              BitmapWidth,
              BitmapHeight,
              0
             );

    FreePool(BMPData);
    FreePool(BltBuffer );
    return Status;
}