25 #include "../gfxfont.h" 27 #define DPI 141 // Approximate res. of Adafruit 2.8" TFT 31 static uint8_t row = 0, sum = 0, bit = 0x80, firstCall = 1;
42 printf(
"0x%02X", sum);
49 int main(
int argc,
char *argv[]) {
50 int i, j, err, size, first=
' ', last=
'~',
51 bitmapOffset = 0,
x, y, byte;
52 char *fontName, c, *ptr;
69 fprintf(stderr,
"Usage: %s fontfile size [first] [last]\n",
78 }
else if(argc == 5) {
79 first = atoi(argv[3]);
89 ptr = strrchr(argv[1],
'/');
94 if((!(fontName = malloc(strlen(ptr) + 20))) ||
95 (!(table = (
GFXglyph *)malloc((last - first + 1) *
97 fprintf(stderr,
"Malloc error\n");
103 strcpy(fontName, ptr);
104 ptr = strrchr(fontName,
'.');
105 if(!ptr) ptr = &fontName[strlen(fontName)];
108 sprintf(ptr,
"%dpt%db", size, (last > 127) ? 8 : 7);
110 for(i=0; (c=fontName[
i]); i++) {
111 if(isspace(c) || ispunct(c)) fontName[i] =
'_';
115 if((err = FT_Init_FreeType(&library))) {
116 fprintf(stderr,
"FreeType init error: %d", err);
119 if((err = FT_New_Face(library, argv[1], 0, &face))) {
120 fprintf(stderr,
"Font load error: %d", err);
121 FT_Done_FreeType(library);
126 FT_Set_Char_Size(face, size << 6, 0,
DPI, 0);
134 printf(
"const uint8_t %sBitmaps[] PROGMEM = {\n ", fontName);
137 for(i=first, j=0; i<=last; i++, j++) {
140 if((err = FT_Load_Char(face, i, FT_LOAD_TARGET_MONO))) {
141 fprintf(stderr,
"Error %d loading char '%c'\n",
146 if((err = FT_Render_Glyph(face->glyph,
147 FT_RENDER_MODE_MONO))) {
148 fprintf(stderr,
"Error %d rendering char '%c'\n",
153 if((err = FT_Get_Glyph(face->glyph, &glyph))) {
154 fprintf(stderr,
"Error %d getting glyph '%c'\n",
159 bitmap = &face->glyph->bitmap;
160 g = (FT_BitmapGlyphRec *)glyph;
171 table[j].
width = bitmap->width;
172 table[j].
height = bitmap->rows;
173 table[j].
xAdvance = face->glyph->advance.x >> 6;
177 for(y=0; y < bitmap->rows; y++) {
178 for(
x=0;
x < bitmap->width;
x++) {
180 bit = 0x80 >> (
x & 7);
181 enbit(bitmap->buffer[
182 y * bitmap->pitch + byte] & bit);
187 int n = (bitmap->width * bitmap->rows) & 7;
192 bitmapOffset += (bitmap->width * bitmap->rows + 7) / 8;
194 FT_Done_Glyph(glyph);
200 printf(
"const GFXglyph %sGlyphs[] PROGMEM = {\n", fontName);
201 for(i=first, j=0; i<=last; i++, j++) {
202 printf(
" { %5d, %3d, %3d, %3d, %4d, %4d }",
203 table[j].bitmapOffset,
210 printf(
", // 0x%02X", i);
211 if((i >=
' ') && (i <=
'~')) {
217 printf(
" }; // 0x%02X", last);
218 if((last >=
' ') && (last <=
'~')) printf(
" '%c'", last);
222 printf(
"const GFXfont %s PROGMEM = {\n", fontName);
223 printf(
" (uint8_t *)%sBitmaps,\n", fontName);
224 printf(
" (GFXglyph *)%sGlyphs,\n", fontName);
225 printf(
" 0x%02X, 0x%02X, %ld };\n\n",
226 first, last, face->size->metrics.height >> 6);
227 printf(
"// Approx. %d bytes\n",
228 bitmapOffset + (last - first + 1) * 7 + 7);
232 FT_Done_FreeType(library);
int main(int argc, char *argv[])
void enbit(uint8_t value)