# read gfx folder import os import sys import PIL from PIL import Image def get_all_gfx(): gfx = [] for root, dirs, files in os.walk("gfx"): for file in files: if file.startswith("."): continue # file name without extention name = os.path.splitext(file)[0] gfx.append((name, os.path.join(root, file))) gfx.sort() return gfx def to_code(name, path): img = Image.open(path) img = img.convert("1", dither=Image.Dither.FLOYDSTEINBERG) w, h = img.size code = f"uint32_t gfx_{name}[{h}] = {'{'}\n" for y in range(h): code += " 0b" for x in range(w): px = img.getpixel((x, y)) code += '0' if px == 0 else '1' code += ",\n" code += "};\n\n" return code def generate_gfx(): gfx = get_all_gfx() gfx_code = ''.join(to_code(name, path) for name, path in gfx) header = f"#pragma once\n#include \n\n/* DO NOT MODIFY - AUTOGENERATED! */\n\n" index = f"uint32_t* frames[{len(gfx)}] = {'{'}\n" for name, _ in gfx: index += f" gfx_{name},\n" index += "};\n" with open("src/gfx.h", "w") as f: f.write(header) f.write("#define GFX_COUNT " + str(len(gfx)) + "\n\n") f.write(gfx_code) f.write(index) print("gfx.h generated!") def png_to_code(name, path): file = open(path, "rb") data = file.read() size = len(data) code = f"static const uint8_t png_{name}[{size}] = {'{'}" for i in range(size): code += f"0x{data[i]:02x}," code += "};\n" code += f"#define PNG_SIZE_{name} {size}\n\n" return code def generate_png_gfx(): gfx = get_all_gfx() gfx_code = ''.join(png_to_code(name, path) for name, path in gfx) header = f"#pragma once\n#include \n\n/* DO NOT MODIFY - AUTOGENERATED! */\n\n" index = f"static const uint8_t* png_frames[{len(gfx)}] = {'{'}" for name, _ in gfx: index += f"png_{name}," index += "};\n\n" size_index = f"size_t png_frame_sizes[{len(gfx)}] = {'{'}" for name, _ in gfx: size_index += f"PNG_SIZE_{name}," size_index += "};\n" with open("src/gfx_png.h", "w") as f: f.write(header) f.write("#define PNG_COUNT " + str(len(gfx)) + "\n\n") f.write(gfx_code) f.write(index) f.write(size_index) print("gfx_png.h generated!") if __name__ == "__main__": # generate_gfx() generate_png_gfx()