vrnp/client/scripts/extract_bitmaps.py

46 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
from PIL import Image
from pathlib import Path
def get_bit(im, x, y):
px = im.getpixel((x, y))
if px == 0 or px == (0, 0, 0, 255):
return 0
if px == 1 or px == (255, 255, 255, 255):
return 1
print(x, y)
print(px)
raise
def generate_bitmap_from_gif(file: Path, fd):
variable_name = file.with_suffix("").name
im = Image.open(file)
(w, h) = im.size
assert w % 8 == 0
fd.write(f"static const uint16_t PROGMEM {variable_name}_dims[] = {{{w}, {h}, {im.n_frames}}};\n")
fd.write(f"static const uint8_t PROGMEM {variable_name}[][{w * h // 8}] = {{\n")
for i in range(im.n_frames):
im.seek(i)
fd.write(" {\n")
for y in range(h):
line = []
for x in range(0, w, 8):
byte_str = "".join(str(get_bit(im, x + i, y)) for i in range(8))
byte = int(byte_str, 2)
line.append(f"0x{byte:02x}")
line_str = ", ".join(line)
fd.write(f" {line_str},\n")
fd.write(" },\n")
fd.write("};\n")
if __name__ == "__main__":
generate_bitmap_from_gif(Path("./animations/spinny.gif"), sys.stdout)