From db47e28d8234c02163596686109cbd149b3f0e96 Mon Sep 17 00:00:00 2001 From: Will Toohey Date: Sun, 19 Jul 2026 23:11:39 +1000 Subject: [PATCH] Add support to encode argb4444 textures Honestly dunno why I didn't do this literally years ago, it's just reversing the existing logic... --- src/ifstools/handlers/image_decoders.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ifstools/handlers/image_decoders.py b/src/ifstools/handlers/image_decoders.py index 739e96d..b2fe5bd 100644 --- a/src/ifstools/handlers/image_decoders.py +++ b/src/ifstools/handlers/image_decoders.py @@ -43,6 +43,13 @@ def decode_argb4444(ifs_img, data): r, g, b, a = im.split() return Image.merge('RGBA', (b, g, r, a)) +def encode_argb4444(ifs_img, image): + # there's no BGRA;4B + r, g, b, a = image.split() + image = Image.merge('RGBA', (b, g, r, a)) + + return image.tobytes('raw', 'RGBA;4B') + def decode_dxt(ifs_img, data, version): rgba = _native.decode_dxt(data, ifs_img.img_size[0], ifs_img.img_size[1], version) return Image.frombytes('RGBA', ifs_img.img_size, rgba) @@ -59,7 +66,7 @@ def encode_dxt5(ifs_img, image): image_formats = { 'argb8888rev' : {'decoder': decode_argb8888rev, 'encoder': encode_argb8888rev}, - 'argb4444' : {'decoder': decode_argb4444, 'encoder': None}, + 'argb4444' : {'decoder': decode_argb4444, 'encoder': encode_argb4444}, 'dxt1' : {'decoder': decode_dxt1, 'encoder': None}, 'dxt5' : {'decoder': decode_dxt5, 'encoder': encode_dxt5 if _native else None}, }