From f70fa42eac6031c506f648a28c1c2ccf12de136a Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Wed, 8 Nov 2023 01:33:55 +0100 Subject: [PATCH] more accurate palette conversion --- docs/source/todo.rst | 1 - examples/cx16/sprites/convertsprite.py | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/source/todo.rst b/docs/source/todo.rst index cc51cd776..0b1de6096 100644 --- a/docs/source/todo.rst +++ b/docs/source/todo.rst @@ -1,7 +1,6 @@ TODO ==== -- integrate MCIOUT into diskio.f_write() - revisit the seek example to see if write-seeking now works? - remove unused interned strings in the resulting code (for example from removed if/else blocks) - [on branch: shortcircuit] investigate McCarthy evaluation again? this may also reduce code size perhaps for things like if a>4 or a<2 .... diff --git a/examples/cx16/sprites/convertsprite.py b/examples/cx16/sprites/convertsprite.py index dfba86339..34a5d94a6 100644 --- a/examples/cx16/sprites/convertsprite.py +++ b/examples/cx16/sprites/convertsprite.py @@ -2,10 +2,15 @@ from PIL import Image + def make_cx16_palette(palette: list[int]) -> bytes: + def to4bit(color: int) -> int: + return (color * 15 + 135) >> 8 # see https://threadlocalmutex.com/?p=48 cx16palette = bytearray() for pi in range(0, len(palette), 3): - r, g, b = palette[pi] >> 4, palette[pi + 1] >> 4, palette[pi + 2] >> 4 + r = to4bit(palette[pi]) + g = to4bit(palette[pi+1]) + b = to4bit(palette[pi+2]) cx16palette.append(g << 4 | b) cx16palette.append(r) return cx16palette