Initial Commit
This commit is contained in:
Binary file not shown.
+11981
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+25905
File diff suppressed because it is too large
Load Diff
+21422
File diff suppressed because it is too large
Load Diff
+20768
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,70 @@
|
||||
""" Pasted from cursor chat to be able to use bdf fonts easier in the future """
|
||||
|
||||
|
||||
|
||||
|
||||
""" Font Loading """
|
||||
import freetype
|
||||
face = freetype.Face("path/to/font.bdf")
|
||||
|
||||
""" rendering the character """
|
||||
# Load the character
|
||||
face.load_char(char)
|
||||
|
||||
# Get the bitmap data
|
||||
bitmap = face.glyph.bitmap
|
||||
|
||||
# The bitmap data is stored in a packed format where:
|
||||
# - Each byte represents 8 pixels
|
||||
# - bitmap.pitch is the number of bytes per row
|
||||
# - bitmap.width is the width in pixels
|
||||
# - bitmap.rows is the height in pixels
|
||||
|
||||
" Drawing the character "
|
||||
#For each row in the bitmap
|
||||
for i in range(bitmap.rows):
|
||||
# For each pixel in the row
|
||||
for j in range(bitmap.width):
|
||||
# Calculate which byte contains this pixel
|
||||
byte_index = i * bitmap.pitch + (j // 8)
|
||||
|
||||
# Get the byte
|
||||
byte = bitmap.buffer[byte_index]
|
||||
|
||||
# Check if the specific bit is set (1 = draw pixel)
|
||||
if byte & (1 << (7 - (j % 8))):
|
||||
# Draw the pixel at (x + j, y + i)
|
||||
draw.point((x + j, y + i), fill=(255, 255, 255))
|
||||
|
||||
" Character Spacing "
|
||||
# Move to next character position using the font's advance
|
||||
x += face.glyph.advance.x >> 6 # Advance is in 1/64th of pixels
|
||||
|
||||
|
||||
""" Key Points:
|
||||
BDF fonts are bitmap fonts, so they have a fixed size
|
||||
The bitmap data is stored in a packed format (8 pixels per byte)
|
||||
Each bit in a byte represents whether a pixel should be drawn (1) or not (0)
|
||||
The pitch value tells you how many bytes are in each row
|
||||
The advance value tells you how far to move for the next character
|
||||
Example Usage: """
|
||||
|
||||
|
||||
def draw_bdf_text(draw, text, x, y, font_path):
|
||||
face = freetype.Face(font_path)
|
||||
|
||||
for char in text:
|
||||
face.load_char(char)
|
||||
bitmap = face.glyph.bitmap
|
||||
|
||||
# Draw the character
|
||||
for i in range(bitmap.rows):
|
||||
for j in range(bitmap.width):
|
||||
byte_index = i * bitmap.pitch + (j // 8)
|
||||
if byte_index < len(bitmap.buffer):
|
||||
byte = bitmap.buffer[byte_index]
|
||||
if byte & (1 << (7 - (j % 8))):
|
||||
draw.point((x + j, y + i), fill=(255, 255, 255))
|
||||
|
||||
# Move to next character
|
||||
x += face.glyph.advance.x >> 6
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user