41 lines
1006 B
Python
Executable File
41 lines
1006 B
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from PIL import Image
|
|
|
|
FONT_SIZE = (4, 8)
|
|
|
|
|
|
def convert(filename, subset=range(0,128)):
|
|
img = Image.open(filename)
|
|
print("""#include <stdint.h>
|
|
|
|
uint16_t default_font[] = {""")
|
|
grid = (img.size[0] // FONT_SIZE[0], img.size[1] // FONT_SIZE[1])
|
|
ch = 0
|
|
for r in range(grid[1]):
|
|
for c in range(grid[0]):
|
|
v = 0
|
|
for x in range(FONT_SIZE[0]):
|
|
for y in range(FONT_SIZE[1]-1, -1, -1):
|
|
v <<= 1
|
|
if img.getpixel((c*FONT_SIZE[0]+x,r*FONT_SIZE[1]+y)):
|
|
v |= 1
|
|
h = (v >> 16) & 0xffff
|
|
l = v & 0xffff
|
|
if 32 <= ch < 127:
|
|
d = f'"{ch:c}" '
|
|
else:
|
|
d = ''
|
|
if ch in subset:
|
|
print(f"\t0x{h:04x}, 0x{l:04x},\t/* {ch:3d} 0x{ch:02x} {d}*/")
|
|
ch += 1
|
|
print("};")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
|
|
for fn in sys.argv[1:]:
|
|
convert(fn)
|
|
|