use signed height

Signed-off-by: Slice <sergey.slice@gmail.com>
This commit is contained in:
Slice 2024-06-08 22:51:49 +03:00
parent 52d0dcd2c6
commit eb76853ba7
4 changed files with 22 additions and 21 deletions

View File

@ -172,7 +172,7 @@ DecodeImageData (//IN APPLE_IMAGE_CODEC_PROTOCOL* This,
}
DBG("EFI_SUCCESS, RawImageDataSize=%d\n", *RawImageDataSize);
DBG("ImageBuffer=%p, ImageSize=%d\n", ImageBuffer, ImageSize);
DBG("ImageBuffer, ImageSize=%d\n", ImageSize);
DBG("Decoded: W=%d, H=%d\n", Image->Width, Image->Height);
for (Index=0; Index<10; Index++) {
DBG("P%d: r,g,b,a= %x, %x, %x, %x\n", Index, (*RawImageData)[Index].Red, (*RawImageData)[Index].Green, (*RawImageData)[Index].Blue, (*RawImageData)[Index].Reserved);

View File

@ -40,6 +40,7 @@
#define DBG(...)
// BMP structures
//#pragma pack(1)
@ -81,7 +82,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
EG_IMAGE *NewImage;
BMP_IMAGE_HEADER *BmpHeader;
BMP_COLOR_MAP *BmpColorMap;
UINT32 RealPixelHeight, RealPixelWidth;
INT32 RealPixelHeight, RealPixelWidth;
UINT8 *ImagePtr;
UINT8 *ImagePtrBase;
UINTN ImageLineOffset;
@ -132,7 +133,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
// convert image
BmpColorMap = (BMP_COLOR_MAP *)(FileData + sizeof(BMP_IMAGE_HEADER));
ImagePtrBase = FileData + BmpHeader->ImageOffset;
for (UINT32 y = 0; y < RealPixelHeight; y++) {
for (INT32 y = 0; y < RealPixelHeight; y++) {
ImagePtr = ImagePtrBase;
ImagePtrBase += ImageLineOffset;
// vertically mirror
@ -145,7 +146,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
switch (BmpHeader->BitPerPixel) {
case 1:
for (UINT32 x = 0; x < RealPixelWidth; x++) {
for (INT32 x = 0; x < RealPixelWidth; x++) {
BitIndex = x & 0x07;
if (BitIndex == 0)
ImageValue = *ImagePtr++;
@ -161,8 +162,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
case 4:
{
UINT32 x;
for (x = 0; x <= RealPixelWidth - 2; x += 2) {
for (INT32 x = 0; x <= RealPixelWidth - 2; x += 2) {
ImageValue = *ImagePtr++;
Index = ImageValue >> 4;
@ -179,7 +179,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
PixelPtr->Reserved = AlphaValue;
PixelPtr++;
}
if (x < RealPixelWidth) {
if ((RealPixelWidth & 1) == 1) {
ImageValue = *ImagePtr++;
Index = ImageValue >> 4;
@ -192,7 +192,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
break;
}
case 8:
for (UINT32 x = 0; x < RealPixelWidth; x++) {
for (INT32 x = 0; x < RealPixelWidth; x++) {
Index = *ImagePtr++;
PixelPtr->Blue = BmpColorMap[Index].Blue;
PixelPtr->Green = BmpColorMap[Index].Green;
@ -203,7 +203,7 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
break;
case 24:
for (UINT32 x = 0; x < RealPixelWidth; x++) {
for (INT32 x = 0; x < RealPixelWidth; x++) {
PixelPtr->Blue = *ImagePtr++;
PixelPtr->Green = *ImagePtr++;
PixelPtr->Red = *ImagePtr++;
@ -212,13 +212,13 @@ EG_IMAGE * egDecodeBMP(IN UINT8 *FileData, IN UINTN FileDataLength, IN BOOLEAN W
}
break;
case 32:
for (UINT32 x = 0; x < RealPixelWidth; x++) {
for (INT32 x = 0; x < RealPixelWidth; x++) {
PixelPtr->Blue = *ImagePtr++;
PixelPtr->Green = *ImagePtr++;
PixelPtr->Red = *ImagePtr++;
PixelPtr->Reserved = *ImagePtr++;
if (!WantAlpha)
PixelPtr->Reserved = 255 - PixelPtr->Reserved;
// if (!WantAlpha)
// PixelPtr->Reserved = 255 - PixelPtr->Reserved;
PixelPtr++;
}

View File

@ -318,7 +318,7 @@ EFI_PART_TYPE_LEGACY_MBR_GUID {0x024DEE41, 0x33E7, 0x11D3, {0x9D, 0x69, 0x00, 0x
// 00 00 08 00 00 00 00 00 | ........
// gAppleFpfConfigurationHobGuid = { 0xE3CC8EC6, 0x81C1, 0x4271, { 0xAC, 0xBC, 0xDB, 0x65, 0x08, 0x6E, 0x8D, 0xC8 }}
// 59D76AE4-37E3-55A7-B460-EF13D46E6020 AppleEncryptedPartitionProtocolGuid
// ->LocateProtocol(3496A19A-2E99-41BA-833E-0FDE2EBF2A55, 0, 0/0) = Not Found
/*
#define APPLE_SECURE_BOOT_VARIABLE_GUID \
{ 0x94B73556, 0x2197, 0x4702, \

View File

@ -17,11 +17,12 @@
#include <Protocol/AppleImageCodecProtocol.h>
#include "XImage.h"
#include "../Platform/Utils.h"
//#include "picopng.h"
#include "lodepng.h"
//#define DBG(...) AsciiPrint(__VA_ARGS__);
//#define DBG(...) DebugLog(1, __VA_ARGS__)
#define DBG(...)
struct EFI_RES_ENTRY {
@ -105,7 +106,7 @@ RecognizeImageData (//IN APPLE_IMAGE_CODEC_PROTOCOL* This,
}
DBG("EFI_SUCCESS\n");
DBG(" ImageSize=%d\n", ImageSize);
DBG(" ImageSize=%lld\n", ImageSize);
// DBG("Decoded: W=%d, H=%d\n", Image.GetWidth(), Image.GetHeight());
return EFI_SUCCESS;
}
@ -132,7 +133,7 @@ GetImageDims (//IN APPLE_IMAGE_CODEC_PROTOCOL* This,
*ImageHeight = (UINT32)Image.GetHeight();
DBG("EFI_SUCCESS, Width=%d, Height=%d\n", *ImageWidth, *ImageHeight);
DBG("ImageSize=%d\n", ImageSize);
DBG("ImageSize=%lld\n", ImageSize);
return EFI_SUCCESS;
}
@ -167,11 +168,11 @@ DecodeImageData (//IN APPLE_IMAGE_CODEC_PROTOCOL* This,
}
DBG("EFI_SUCCESS, RawImageDataSize=%d\n", *RawImageDataSize);
// DBG("ImageBuffer=%p, ImageSize=%d\n", ImageBuffer, ImageSize);
// DBG("Decoded: W=%d, H=%d\n", Image->Width, Image->Height);
// for (int Index=0; Index<10; Index++) {
// DBG("P%d: r,g,b,a= %x, %x, %x, %x\n", Index, (*RawImageData)[Index].Red, (*RawImageData)[Index].Green, (*RawImageData)[Index].Blue, (*RawImageData)[Index].Reserved);
// }
DBG("ImageBuffer=%p, ImageSize=%lld\n", ImageBuffer, ImageSize);
DBG("Decoded: W=%lld, H=%lld\n", Image.GetWidth(), Image.GetHeight());
for (int Index=0; Index<10; Index++) {
DBG("P%d: r,g,b,a= %x, %x, %x, %x\n", Index, (*RawImageData)[Index].Red, (*RawImageData)[Index].Green, (*RawImageData)[Index].Blue, (*RawImageData)[Index].Reserved);
}
// egFreeImage(Image);
return EFI_SUCCESS;
}