Added bitmap font generator
This commit is contained in:
parent
8bd87c4d3d
commit
c2a96747b9
1
font/characters16.txt
Normal file
1
font/characters16.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:!?+-*/=
|
71
font/convert.py
Executable file
71
font/convert.py
Executable file
|
@ -0,0 +1,71 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if len(sys.argv) < 3:
|
||||||
|
print("usage: {} <bitmap> <characters> <output>")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
inputfile = sys.argv[1]
|
||||||
|
charfile = sys.argv[2]
|
||||||
|
outputfile = sys.argv[3]
|
||||||
|
|
||||||
|
im = Image.open(inputfile)
|
||||||
|
|
||||||
|
cols, rows = im.size
|
||||||
|
|
||||||
|
offset = 4 # hardcoded 'space'
|
||||||
|
startpos = offset
|
||||||
|
|
||||||
|
fixedwidth = 9
|
||||||
|
|
||||||
|
charpos = [0] # hardcoded 'space'
|
||||||
|
chardata = [0x00] * offset # hardcoded 'space'
|
||||||
|
charwidth = [offset] # hardcoded 'space'
|
||||||
|
|
||||||
|
for col in range(cols):
|
||||||
|
coldata = 0
|
||||||
|
|
||||||
|
for row in range(rows):
|
||||||
|
px = 0 if im.getpixel( (col, row) ) else 1
|
||||||
|
coldata |= (px << row)
|
||||||
|
|
||||||
|
print("{:016b}".format(coldata))
|
||||||
|
|
||||||
|
width = offset - startpos
|
||||||
|
|
||||||
|
chardata.append(coldata)
|
||||||
|
|
||||||
|
if width == fixedwidth:
|
||||||
|
charpos.append(startpos)
|
||||||
|
charwidth.append(width)
|
||||||
|
startpos = offset
|
||||||
|
else:
|
||||||
|
offset += 1
|
||||||
|
|
||||||
|
dataarray = ", ".join([hex(n) for n in chardata])
|
||||||
|
posarray = ", ".join([str(n) for n in charpos])
|
||||||
|
widtharray = ", ".join([str(n) for n in charwidth])
|
||||||
|
|
||||||
|
asciimap = [0 for i in range(256)]
|
||||||
|
|
||||||
|
with open(charfile, "r") as cfile:
|
||||||
|
s = " " + cfile.read().strip()
|
||||||
|
for i in range(len(s)):
|
||||||
|
asciimap[ord(s[i])] = i
|
||||||
|
|
||||||
|
asciimaparray = ", ".join([str(n) for n in asciimap])
|
||||||
|
|
||||||
|
with open(outputfile, "w") as ofile:
|
||||||
|
ofile.write("""
|
||||||
|
#include "font16_data.h"
|
||||||
|
|
||||||
|
const uint16_t font_data[{}] = {{ {} }};
|
||||||
|
const uint16_t font_pos[{}] = {{ {} }};
|
||||||
|
const uint8_t font_width[{}] = {{ {} }};
|
||||||
|
|
||||||
|
const uint8_t font_lut[256] = {{ {} }};
|
||||||
|
|
||||||
|
const uint8_t font_height = {};
|
||||||
|
""".format(len(chardata), dataarray, len(charpos), posarray, len(charwidth), widtharray, asciimaparray, rows))
|
BIN
font/font_h16.xcf
Normal file
BIN
font/font_h16.xcf
Normal file
Binary file not shown.
Loading…
Reference in a new issue