mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-28 07:47:02 -05:00
patterns: Add TGA pattern (#29)
This commit is contained in:
79
patterns/tga.hexpat
Normal file
79
patterns/tga.hexpat
Normal file
@@ -0,0 +1,79 @@
|
||||
#pragma MIME image/tga
|
||||
#pragma endian little
|
||||
|
||||
#include <std/mem.pat>
|
||||
|
||||
struct ColorMapSpec {
|
||||
u16 entryIndex;
|
||||
u16 entryLength;
|
||||
u8 bpp;
|
||||
} [[static]];
|
||||
|
||||
bitfield ImageDesc {
|
||||
alphaDepth : 4;
|
||||
orderRightToLeft : 1;
|
||||
orderTopToBottom : 1;
|
||||
padding : 2;
|
||||
};
|
||||
|
||||
struct ImageSpec {
|
||||
u16 xOrigin;
|
||||
u16 yOrigin;
|
||||
u16 width;
|
||||
u16 height;
|
||||
u8 depth;
|
||||
ImageDesc imageDesc;
|
||||
} [[static]];
|
||||
|
||||
enum ColorMapType : u8 {
|
||||
None,
|
||||
ColorPalette,
|
||||
};
|
||||
|
||||
enum ImageType : u8 {
|
||||
NoData,
|
||||
UncompressedColorMapped,
|
||||
UncompressedRGB,
|
||||
UncompressedGreyscale,
|
||||
RLEColorMapped = 9,
|
||||
RLERGB,
|
||||
RLEGreyscale,
|
||||
// huffman + delta + rle
|
||||
CompressedColorMapped = 32,
|
||||
// huffman + delta + rle, 4-pass quadtree-type
|
||||
CompressedColorMapped4Pass,
|
||||
};
|
||||
|
||||
fn GetImageDataSize(ImageSpec imSpec) {
|
||||
return imSpec.height * imSpec.width * (imSpec.depth / 8);
|
||||
};
|
||||
|
||||
fn GetColorMapDataSize(ColorMapSpec cmSpec) {
|
||||
return cmSpec.entryLength * (cmSpec.bpp / 8);
|
||||
};
|
||||
|
||||
struct Header {
|
||||
u8 idLength;
|
||||
ColorMapType colorMapType;
|
||||
ImageType imageType;
|
||||
ColorMapSpec colorMapSpec;
|
||||
ImageSpec imageSpec;
|
||||
char imageId[idLength];
|
||||
|
||||
if (colorMapType == ColorMapType::ColorPalette) {
|
||||
u8 colorMapData[GetColorMapDataSize(colorMapSpec)];
|
||||
}
|
||||
|
||||
u8 imageData[GetImageDataSize(imageSpec)];
|
||||
};
|
||||
|
||||
struct Footer {
|
||||
u32 extensionOffset;
|
||||
u32 developerDirectoryOffset;
|
||||
char signature[0x10];
|
||||
char dot;
|
||||
char null;
|
||||
};
|
||||
|
||||
Header header @ 0x0;
|
||||
Footer footer @ std::mem::size() - 0x1A;
|
||||
Reference in New Issue
Block a user