Compare commits
2 Commits
c6e2d52831
...
bd080a0f9e
Author | SHA1 | Date | |
---|---|---|---|
bd080a0f9e | |||
570b848625 |
9
headers/font.h
Normal file
9
headers/font.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct font {
|
||||||
|
uint32_t height;
|
||||||
|
uint32_t width;
|
||||||
|
char **bitmap;
|
||||||
|
};
|
68
tools/font_converter.py
Normal file
68
tools/font_converter.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
if (len(sys.argv) < 2):
|
||||||
|
print(f"Error: usage python {sys.argv[0]} {{file.fnt}}")
|
||||||
|
|
||||||
|
with open(sys.argv[1]) as f:
|
||||||
|
fnt_data = f.read()
|
||||||
|
|
||||||
|
font_name: str = os.path.basename(sys.argv[1]).split(".")[0]
|
||||||
|
|
||||||
|
img_file_relative_path: str = re.findall(r"file=\"(\w+[^\"]+)\"", fnt_data)[0]
|
||||||
|
img_file_absolute_path: str = sys.argv[1][0:sys.argv[1].rfind("/") + 1] + img_file_relative_path
|
||||||
|
|
||||||
|
image = Image.open(img_file_absolute_path)
|
||||||
|
|
||||||
|
width, height = image.size
|
||||||
|
pixels = list(image.getdata())
|
||||||
|
pixels = [pixels[i * width:(i + 1) * width] for i in range(height)]
|
||||||
|
|
||||||
|
characteres: list[list[int]] = [None for i in range(128)]
|
||||||
|
|
||||||
|
for id, x, y, width, height, xoffset, yoffset, xadvance in re.findall(r"id=(\d+) x=(\d+) y=(\d+) width=(\d+) height=(\d+) xoffset=(-?\d+) yoffset=(-?\d+) xadvance=(\d+)", fnt_data):
|
||||||
|
id, x, y, width, height, xoffset, yoffset, xadvance = int(id), int(x), int(y), int(width), int(height), int(xoffset), int(yoffset), int(xadvance)
|
||||||
|
bitmap: list[str] = []
|
||||||
|
for line in pixels[y:y + height]:
|
||||||
|
tmp: str = ""
|
||||||
|
for r,g,b,a in line[x:x + width]:
|
||||||
|
tmp += "#" if a else " "
|
||||||
|
bitmap.append(tmp)
|
||||||
|
characteres[id] = [height, width, bitmap]
|
||||||
|
|
||||||
|
string: str = f"""\
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "font.h"
|
||||||
|
|
||||||
|
struct font minecraft_font[] = {{\\\
|
||||||
|
"""
|
||||||
|
|
||||||
|
for charactere in characteres:
|
||||||
|
if (charactere is not None):
|
||||||
|
height, width, bitmap = charactere
|
||||||
|
string += f"""
|
||||||
|
{{
|
||||||
|
.width = {width},
|
||||||
|
.height = {height},
|
||||||
|
.bitmap = "{"".join(bitmap)}",
|
||||||
|
}},\
|
||||||
|
"""
|
||||||
|
else:
|
||||||
|
string += f"""
|
||||||
|
{{
|
||||||
|
.width = 0,
|
||||||
|
.height = 0,
|
||||||
|
.bitmap = NULL,
|
||||||
|
}},\
|
||||||
|
"""
|
||||||
|
string += "\n}};"
|
||||||
|
|
||||||
|
if not os.path.exists("./headers/fonts"):
|
||||||
|
os.makedirs("./headers/fonts")
|
||||||
|
|
||||||
|
with open(f"./headers/fonts/{font_name}.h", "w") as f:
|
||||||
|
f.write(string)
|
@ -33,5 +33,8 @@ struct icon {filename}_icon = {{
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if not os.path.exists("./headers/icons"):
|
||||||
|
os.makedirs("./headers/icons")
|
||||||
|
|
||||||
with open(f"./headers/icons/{filename}.h", "w") as f:
|
with open(f"./headers/icons/{filename}.h", "w") as f:
|
||||||
f.write(string)
|
f.write(string)
|
Loading…
Reference in New Issue
Block a user