From b602944f9a9057933abb1ff1c12b4deabc4883fb Mon Sep 17 00:00:00 2001 From: Pedro de Medeiros Date: Wed, 10 May 2023 06:16:01 +0000 Subject: png2sprites: allow user to change transparent colour --- docs/tools.md | 8 +++++--- tools/png2sprites.py | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/docs/tools.md b/docs/tools.md index acc5e60..0899411 100644 --- a/docs/tools.md +++ b/docs/tools.md @@ -65,9 +65,11 @@ The result is 1 bit per pixel data without colour information. The colour will be provided as part of the `attr` field in the `sprite_attr` struct when calling [ubox_set_sprite_attr](ubox-lib-ref.html#ubox_set_sprite_attr). -The tool interprets dark grey (RGB: 28, 28, 28) as transparent in the MSX -palette, and any other colour will be used as visible monochrome data. If the -image has more than one colour, it will be used to identify different sprites. +The tool interprets dark grey (RGB: 28, 28, 28) as transparent in the MSX palette +by default, but that can be changed with the `-t` or `--transparent` flag and a 6 +digit hexadecimal value as parameter. Any other colour will be used as visible +monochrome data. If the image has more than one colour, it will be used to identify +different sprites. For example: diff --git a/tools/png2sprites.py b/tools/png2sprites.py index 95e6492..d51251f 100755 --- a/tools/png2sprites.py +++ b/tools/png2sprites.py @@ -21,6 +21,7 @@ # THE SOFTWARE. # +import re from argparse import ArgumentParser from PIL import Image @@ -29,9 +30,18 @@ __version__ = "1.0" DEF_W = 16 DEF_H = 16 +RE_COL = re.compile("^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$") TRANS = (28, 28, 28) +def to_color_tuple(src): + g = RE_COL.search(src) + if g: + return int(g.group(1), 16), int(g.group(2), 16), int(g.group(3), 16) + else: + raise Exception("hexadecimal RRGGBB color expected") + + def to_hex_list_str(src): out = "" for i in range(0, len(src), 8): @@ -79,6 +89,14 @@ def main(): action="store_true", help="include frame color as a comment", ) + parser.add_argument( + "-t", + "--transparent", + dest="trans_color", + type=to_color_tuple, + default="1c1c1c", + help="redefine transparent color in 6-digit hexadecimal notation (default: 1c1c1c)", + ) parser.add_argument("image", help="image to convert") @@ -109,7 +127,7 @@ def main(): tile = [ data[x + i + ((y + j) * w)] for j in range(DEF_H) for i in range(DEF_W) ] - cols = sorted(set([c for c in tile if c != TRANS])) + cols = sorted(set([c for c in tile if c != args.trans_color])) if not cols: continue -- cgit v1.2.3