aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro de Medeiros <pedro.medeiros@gmail.com>2023-05-10 06:16:01 +0000
committerJuan J. Martínez <jjm@usebox.net>2023-05-10 06:16:01 +0000
commitb602944f9a9057933abb1ff1c12b4deabc4883fb (patch)
tree8dd526b2ddd5d19082458029753cdb7c63b51181
parentc9f28c1ce3ffda9c407003a26adf903d810b681b (diff)
downloadubox-msx-lib-b602944f9a9057933abb1ff1c12b4deabc4883fb.tar.gz
ubox-msx-lib-b602944f9a9057933abb1ff1c12b4deabc4883fb.zip
png2sprites: allow user to change transparent colour
-rw-r--r--docs/tools.md8
-rwxr-xr-xtools/png2sprites.py20
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