binFontsTool - редактор шрифтов AdafruitGFX, UTFT на MS Excel
- Войдите на сайт для отправки комментариев
Пнд, 08/05/2017 - 18:02
binFontsTool - редактор шрифтов для библиотек AdafruitGFX и UTFT на MS Excel VBA
Создание собственных шрифтов, чтение и запись файлов шрифтов AdafruitGFX, UTFT, бинарных файлов, файлов Adobe BDF. Изменение кодировки импортированных шрифтов. Функции редактирования символов.
Пример использования: с редактором идут досовские шрифты 8х16, в программе наживаем Open binary, задаем ширину 8, высоту 16, первый символ например 32, последний 255. После загрузки шрифта жмем Encoding и выбираем смену кодировки DOS 866 на Windows 1251. После смены кодировки жмем Save as fonts C, выбираем библиотеку для которой хотим сохранить шрифт. Задаем файл сохранения, имя шрифта и жмем Ок
Последняя строка на листе имеющая не пустое значение считается последней строкой массива символов. Все операции сохранения шрифтов работают до этой строки, важно не создавать лишних строк. Сочетание клавиш Ctrl + End покажет вам последнюю строку имеющую значение.
В столбце 353 (char) первой строки каждого символа отображается десятичное значение кода которое будет присвоено символу при сохранении С файла. Код формируется последовательно начиная с заданного значения для первого символа. При чтении BDF файла коды символов из шрифта в файле вносятся в столбец 354 (code), диапазон этих кодов не всегда будет соответствовать диапазону значений в столбце char. В таком случае для корректного сохранения С файла сначала следует провести операцию смены кодировки по столбцу 354. Если нет необходимости менять кодовую страницу, следует указать текущую в полях From и To. Если после этого остались пустые строки вместо символов, следует провести операцию Refresh которая расставит нули в пропущенных символах. Такой шрифт уже можно использовать в глифовых версиях, например AdafruitGFX или UTFT glyph (для библиотеки UTFT_binFonts), либо можно заполнить пустые символы любыми своими по желанию. Пример: с редактором идут шрифты BDF, откройте LucidaSans-Typewriter14_koi8r задав код первого символа 32 и последнего 255. Сделайте смену кодировки из страницы row: 3 Russian KOI8-R (20866) в страницу row 1: Arduino (RUS) - Windows (1251). Сохраните шрифт как С файл выбрав желаемую библиотеку.
Подскажите пожалуйста. Как в Вашем редакторе добавить символ в шрифт? У меня есть шрифт который состоит только из цифр. Мне туда надо добавить точку и тире. Как это сделать?
цифры имеют коды с 48 по 57. тире код 45, точка 46. надо добавить в ваш шрифт 3 символа с начала. загружаем шрифт с цифрами, затем в settings меняем код первого символа шрифта на 45, жмем ОК без рефреш. выделеям любую группу столбцов: либо с изображением символов, либо группу столбцов бинарных значений, либо десятичных, либ шестнадцетиричных. важно выделить только столбцы принадлежащие к одной группе иначе при вставке столбцов разных групп программа не будет проводить отрисовку. выделять надо только начиная со значащей строки, выделенные первая и вторая строки так же не дадут отрисовки при вставке. т.е. выделяем с третьей строки только, например, ячейки содержащие бинарные значения символов (257-288), выделяем только имеющие значение столбцы, остальные нет смысла. выделили, нажимаем вырезать и устанавливаем курсор на первую ячейку бинарных значений четвертого по счету символа. жмем вставить. теперь можно сделать рефреш и программа заполнит нулями пустые символы сверху, либо начать рисовать их прямо с пустого места. соответственно для сборки символов из разных шрифтов в один можно воспользоваться временным листом экселя, в него по своему усмотрению вставлять значения символов и в последствии вставить все одним массивом в редактор.
PS так же можно проделать вставку строк средствами экселя. можно выделить все столбцы символов, вырезать и перенести их. отрисовка в этом случае происходить не будет, но если есть уверенность, что ошибок в количестве строк нет, можно сохранять так. но лучше провести рефреш задав предварительно новое значение первого кода символов.
еще вариант. после загрузки шрифта копируем столбец 353 (char) начиная с третьей строки до конца в столбец 354 (code). меняем в settings значение кода первого символа на 45 и делаем смену кодировки по столбцу 354 выбрав в качестве исходной и результирующей row 6: RUS Arduino - Windows (1251) либо любую другую содержащую символы основной таблицы (с 0 по 127). таблицы кодировок заполнены на листе Encoding, их можно строить только для дополнительных (региональных) символов, тогда основные символы не будут участвовать в перестроении. в нашем случае следует выбрать любую из кодировок содержащую символы с 0 по 255. смена кодировки расставит символы по порядку и добавит в начале массива три пустых символа.
PS в новой версии этот вариант значительно упрощается. после загрузки шрифта идем в settings меняем количество символов и код первого символа, жмем ОК без refresh, идем в encoding, жмем "copy chars to codes", ставим "sort by column 354" и жмем ОК, кодировка установленная по умолчанию включает все символы.
Ну как бы все получилось. Спасибо! Будем ковырять )))
доступна новая версия 0.2.6
существенно поднял скорость чтения файлов. если требуется только открыть файл и сохранить в другой версии, можно отключить раскраску в настройках для ускорения процесса. добавлена поддержка шрифтов: Squix V2, Squix V3, ILI9341_t3 V1, OLED_I2C
появилась возможность добавления структур шрифта в существующий файл С с возможностью замены существующих таких структур в файле. будьте внимательны к добавляемым со шрифтом директивам обязателным для некоторых библиотек в случае добавления шрифта в файл со шрифтами другой библиотеки или иным кодом.
Доброго времени суток.
Делаю первые шаги в кастомизации шрифтов. Что есть x и y offset в окне сохранения?
Пытался редактировать шрифты для Adafruit GFX с глифами. В итоге получаю смещение на 1 символ в маленьких латиницей (вместо "d" рисует "e"; слово "Wed" пишет как "Wfe"), и на два символа для всей кириллицы.
Тут https://yadi.sk/d/paeYsYWB3UXKbV оригинал и отредактированный (просто открытый и сохраненный) файлы
Оригинал получен фонтконвертером из либы Adafruit GFX, путем слива из двух кусков (с 1 по 191 и с 1040 по 1103 символы) шрифта colibrii.ttf Пришлось вручную править таблицу глифов (русскую часть), прибавляя смещение.
Плюсом маленький вопросик /"хотелка" - можно сделать вывод Bitmap data в файл .c (.h) по такому
1
// Bitmap Data:
2
0x00,
// ' '
3
0xFF, 0xF8, 0xF0,
// '!'
4
0xDE, 0xF6,
// '"'
5
0x12, 0x32, 0x36, 0xFF, 0xFF, 0x24, 0xFF, 0xFF, 0x4C, 0x48,
// '#'
шаблону ?
Спасибо за ваш труд!
Еще в догонку
Гдето попадалось описание принципов кодировки шрифтов в Adafruit GFX и расшифровки глиф таблицы, а где? - не помню.
Не подскажите?
В редакторе массив символов всегда представлен как отцентрованный по левому краю моноширный шрифт с шириной и высотой по максимальным значениям всех символов. Для пропорциональных шрифтов указывается правая граница символа в столбце 356 первой строки значений символа (подразумевается, что минимальное значение высоты символов может быть 1 и используется только первая строка для уникальных значений символов. для работы только с этой строкой есть чекбокс на основной панели). Форматы шрифтов AdafritGFX и ILI9341_t3 кроме ширины символа так же позволяют задать смещение глифа символа относительно оси координат. В редакторе в случае ненулевого значения смещения Y положительное значение означает количество строк сверху до первой значащей нижней строки символа «А» (это условно), отрицательное значение – количество строк снизу до той же строки. Смещение X по модулю задает количество строк слева до первого значащего столбца символа «а» (в следующей версии скорее всего сделаю отрицательное значение количеством строк справа относительно ширины шрифта) и действует для всего шрифта, все символы в редакторе считаются выровненными по смещению X. Сделаю раскраску границ ячеек по смещениям в следующей версии для наглядности, пока можно воспользоваться выделением столбцов с первого по значение смещения X, все что попадает в выделенную область условно говоря заходит на предыдущий символ при печати. Это для всяких завитушек и курсива, и по этой причине нет закраски фона символа при печати. Если добавляете в шрифт символ со смещением X большим чем текущий у шрифта, в редакторе прежде необходимо добавить столбцов слева для всех текущих символов до этого значения. Смещение X в редакторе, как и ширина с высотой имеет максимальное значение для всех символов шрифта. При сохранении шрифта в различные форматы программа вычисляет параметры глифов символов в столбцы 361-364 первой строки символов, эти значения имеют разный смысл в разных форматах и носят информативный характер.
Спасибо что обратили внимание на детский баг) плохой идеей было использовать в комментариях неэкранированные символы. Удалите знак слеш в комментарии к символу 92 «// symbol \» или возьмите его в одинарные кавычки '\' тогда все станет отображаться правильно. Надо подробнее почитать про спецсимволы С, в редакторе при чтении после двойного слеша отсекается все до конца строки и такой баг не проявляется, собственно такое поведение внешне и в IDE. В следующей версии редактора поправлю комментарии к символам, пока используйте Default схему добавления имен символов или экранируйте символы самостоятельно на листе Chars.
Все реализованные форматы изучал по комментариям в библиотеках и идущих с ними шрифтах. Для Адафруит структура описана в gfxfont.h
01
typedef
struct
{
// Data stored PER GLYPH
02
uint16_t bitmapOffset;
// Pointer into GFXfont->bitmap
03
uint8_t width, height;
// Bitmap dimensions in pixels
04
uint8_t xAdvance;
// Distance to advance cursor (x axis)
05
int8_t xOffset, yOffset;
// Dist from cursor pos to UL corner
06
} GFXglyph;
07
08
typedef
struct
{
// Data stored for FONT AS A WHOLE:
09
uint8_t *bitmap;
// Glyph bitmaps, concatenated
10
GFXglyph *glyph;
// Glyph array
11
uint8_t first, last;
// ASCII extents
12
uint8_t yAdvance;
// Newline distance (y axis)
13
} GFXfont;
Глиф занимает целое количество байт в массиве Bitmap от произведения высоты и ширины символа, остаток последнего байта принято забивать нолями, но не думаю, что это имеет значение. Хранится глиф построчно без выравнивания на байты, т.е. надо читать количество бит равное ширине символа и следом следующую строку количество раз равное высоте символа.
Ваша хотелку уже сделал в разрабатываемой версии, но до ее выхода еще не слишком скоро. Если очень хочется, можно заменить этим кодом аналогичный в процедуре SaveC модуля Main
01
Case
3
' Adafruit GFX
02
MakeGlyphs 1
03
dds =
False
04
sC =
"// Adafruit GFX font "
& wsMain.Cells(1, 17).Value &
" size: "
& wsMain.Cells(1, 5).Value &
"x"
& wsMain.Cells(1, 7).Value & Chr(13) & Chr(10)
05
s1 =
"const uint8_t "
& wsMain.Cells(1, 17).Value &
"Bitmaps[] PROGMEM = {"
& Chr(13) & Chr(10)
06
s2 =
"const GFXglyph "
& wsMain.Cells(1, 17).Value &
"Glyphs[] PROGMEM = {"
& Chr(13) & Chr(10)
07
s3 =
"const GFXfont "
& wsMain.Cells(1, 17).Value &
" PROGMEM = {"
& Chr(13) & Chr(10) & _
08
" (uint8_t *)"
& wsMain.Cells(1, 17).Value &
"Bitmaps,"
& Chr(13) & Chr(10) & _
09
" (GFXglyph *)"
& wsMain.Cells(1, 17).Value &
"Glyphs,"
& Chr(13) & Chr(10) & _
10
" "
& wsMain.Cells(1, 9).Value &
", "
& (wsMain.Cells(1, 11).Value + wsMain.Cells(1, 9).Value - 1) &
", "
& wsMain.Cells(1, 7).Value &
"};"
11
n = 0
12
fXO = wsMain.Cells(1, 12).Value
13
If
fXO < 0
Then
fXO = 0 - fXO
14
fYO = wsMain.Cells(1, 13).Value
15
If
fYO > 0
Then
fYO = wsMain.Cells(1, 7).Value - fYO - 1
16
For
i = 1
To
wsMain.Cells(1, 11).Value
17
j = 3 + (i - 1) * wsMain.Cells(1, 7).Value
18
If
wsMain.Cells(j, 361).Value > 0
Then
bNum = (wsMain.Cells(j, 361).Value * wsMain.Cells(j, 362).Value - 1) \ 8 + 1
Else
bNum = 0
19
If
wsMain.Cells(j, 356).Value > 0
And
wsMain.Cells(j, 356).Value <= wsMain.Cells(1, 5).Value
Then
cXS = wsMain.Cells(j, 356).Value
Else
cXS = wsMain.Cells(j, 357).Value
20
s2 = s2 &
" { "
& n &
", "
& wsMain.Cells(j, 361).Value &
", "
& wsMain.Cells(j, 362).Value &
", "
& cXS &
", "
& (wsMain.Cells(j, 363).Value + fXO) &
", "
& (wsMain.Cells(j, 364).Value + fYO) &
" }"
21
If
i < wsMain.Cells(1, 11).Value
Then
s2 = s2 &
","
22
s2 = s2 & Chr(9) &
"// "
& wsMain.Cells(j, 355).Value & Chr(13) & Chr(10)
23
If
bNum > 0
Then
24
x = 1
25
y = 0
26
k = 0
27
Do
While
y * 32 + x <= bNum
28
If
k
Mod
16 = 0
Then
s1 = s1 &
" "
29
Select
Case
wsMain.Cells(1, 38).Value
30
Case
1
31
s1 = s1 &
"B"
& ToBinStr(wsMain.Cells(j + y, 364 + x).Value)
32
Case
2
33
s1 = s1 & ToInt(wsMain.Cells(j + y, 364 + x).Value)
34
Case
Else
35
s1 = s1 & wsMain.Cells(j + y, 364 + x).Value
36
End
Select
37
x = x + 1
38
If
x = 33
Then
39
x = 1
40
y = y + 1
41
End
If
42
If
Not
(i = wsMain.Cells(1, 11).Value
And
y * 32 + x > bNum)
Then
s1 = s1 &
","
43
k = k + 1
44
If
k = bNum
Then
45
s1 = s1 & Chr(9) &
"// "
& wsMain.Cells(j, 355).Value & Chr(13) & Chr(10)
46
Else
47
If
k
Mod
16 = 0
Then
s1 = s1 & Chr(13) & Chr(10)
48
End
If
49
Loop
50
End
If
51
n = n + bNum
52
Next
i
53
s1 = s1 &
"};"
54
s2 = s2 &
"};"
немного про смещения глифов в адафруит здесь в конце
https://github.com/adafruit/Adafruit-GFX-Library/blob/master/fontconvert...
PS много багов обнаружил сегодня, выложу вечером апдейт на текущий релиз
выложил версию 0.2.6.2
Кроме сказанного исправлена работа с шириной символа, убрано принудительное изменение, сделал допустимым значение меньше реальной ширины символа, так в адафруит рюшечки справа могут заходить на следующий символ. Исправил реплэйс шрифта адафруит при сохранении в существующий файл. Добавил внесение ширины символа при чтении BDF. В общем много на что начинаешь обращать внимание когда есть общение с пользователем)
Для работы с региональными символами удобно использовать инструмент Encoding, надо только создать таблицу соответствия символов для UTF или чего угодно получаемого различными конвертерами в CP1251 или в любую иную кодировку. Можно создать свои кодировки без русских символов имеющих соответствие среди английских, например.
Для генерации шрифтов из установленных в системе рекомендую fonty, после генерации экспортировать в BDF и открывать его в редакторе.
Доброго времени суток. Вот пускай я покажусь занудой, но у меня опять хотелка.
Копаюсь с библиотекой UCGLIB https://github.com/olikraus/ucglib/tree/master/tools/font
По факту в либе есть только два шрифта с кирилицей и то она сдвинута выше чем обычно (шрифт unifont 08 русская А по адресу 90Н, а не С0Н)
https://github.com/olikraus/ucglib/wiki/fontgroupunifont_old
Описание шрифтов
Найти бы еще шрифты русские готовые в формате BDF или конвертор хороший..
на странице по ссылке на скачивание есть ссылки на два хороших конвртера: FontForge и Fonty, их вполне хватит на любой случай. если нужны шрифты 8х16, то рекомендую погуглить DOS шрифты формата FNT, ссылка на моей странице к сожалению умерла, но их много в сети.
Найти бы еще шрифты русские готовые в формате BDF или конвертор хороший..
Русские фонты можно сделать в 2 приема.
В формате TTF - фонтов просто тысячи, в том числе и русских. Адафруитовская утилита легко конвертит их в свой формат. а потом конвертер уважаемого DenSyo - в любой другой
Русские фонты можно сделать в 2 приема.
В формате TTF - фонтов просто тысячи, в том числе и русских. Адафруитовская утилита легко конвертит их в свой формат. а потом конвертер уважаемого DenSyo - в любой другой
Дайте пожалуйста ссылку на Адафруитовскую утилиту.
Дайте пожалуйста ссылку на Адафруитовскую утилиту.
вот тут лежат исходники и инструкция по сборке, но я где-то и в виде .exe находил, сейчас что-то не попадается
https://github.com/adafruit/Adafruit-GFX-Library/tree/master/fontconvert
и вот эта ссылка очень полезна
https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts
Вот в этом видео есть ссылка на exe файл. Пробовал через него создавать, но по умолчанию он делает только английский шрифт. Если указывать диапазон, то в скаченом шрифте, кириллица начинается с 1040 позиции 0x410. Как правильно или какую кодировку указать, чтобы не было такого разброса
1
const
GFXfont c__font_1931932pt8b PROGMEM = {
2
(uint8_t *)c__font_1931932pt8bBitmaps,
3
(GFXglyph *)c__font_1931932pt8bGlyphs,
4
0x410, 0x44F, 49 };
Если указывать диапазон, то в скаченом шрифте, кириллица начинается с 1040 позиции 0x410. Как правильно или какую кодировку указать, чтобы не было такого разброса
Если в исходном фонте кириллица лежит с 1040 позиции - то какую кодировку не указывай. вы ее коды не измените. А чем вам это мешает? вы чего добиться хотите?
Вам главное знать, где и в каком порядке лежат символы - а какие у них коды - дело десятое, главное чтоб ваша программа их понимала
Кириллица в 0х4хх позициях - это Юникод (UTF-16). И на сегодня считается, что это - единственно правильная кодировка.
Подскажите как создать шрифт с кириллицей для Adafruit-GFX-Library.
Конвертирую латиницу
fontconvert arialcyr.ttf 14 32 126
Кириллицу
fontconvert arialcyr.ttf 14 1040 1103
Как это объединить?
Посмотрел готовые шрифты с кириллицей, там символы р - я имеют коды 128 - 143
далее от А -Я а - п коды 144 - 191
Antsanv, в описании к моей либе dmd- stm32 есть обьяснение, как генерить кириллические шрифты фонтконвертом
Да, я прекрасно пользуюсь этим конвертором. Но как правильно объединить кириллицу и латиницу в одном файле (не как в вашей библиотеке, где разделены диапазоны на 2 массива)?
Непосредственно из фонтконвертора - никак.
А еще в моей теме обьяснено, почему этого делать и не надо
Это понятно. И почему лишний диапазон плохо.
Я и спрашиваю как сделать шрифт в binFontsTool в диапазоне 32-255 с кириллицей.
Я и спрашиваю как сделать шрифт в binFontsTool в диапазоне 32-255 с кириллицей.
в явном виде код символа в фонте нигде не хранится. а значит можно подменить диапазон. Я это сделал, используя два отдельных массива. Если вам нужно, чтобы массив был единый - значит надо предварительно слить два массива в один. Фонтконвертер этого не умеет. знаит единственный способ - писать свою утилиту для редакци шрифтов.
Фонтконвертер не умеет. Но судя по постам топистартера можно слить. Я смотрю на готовые фонты с кириллицей, которые работают на матрицах Р4. Выше написал про диапазоны кодов. Пробовал руками все переставить, но на панели козябры.
Не смотрели код по Вашей новой версии, который я присылал? Там тоже с кириллицей проблема.
ПС: Какие уроды ее изобрели :)
Фонтконвертер не умеет. Но судя по постам топистартера можно слить.
можно
нет пока
Фонтконвертер не умеет. Но судя по постам топистартера можно слить.
можно
Вот в этом и вопрос был. Не подскажите как?
Вот в этом и вопрос был. Не подскажите как?
вечером посмотрю
блин... написал две страницы про слияние фонтов, а сервер сглючил и ничего не отправилось! и все пропало...
Короче, Antsanv. ничего там сложного нет.
Фонт состоит из трех структур. Формат их описан в файле gfxfont.h
01
// Font structures for newer Adafruit_GFX (1.1 and later).
02
// Example fonts are included in 'Fonts' directory.
03
// To use a font in your Arduino sketch, #include the corresponding .h
04
// file and pass address of GFXfont struct to setFont(). Pass NULL to
05
// revert to 'classic' fixed-space bitmap font.
06
07
#ifndef _GFXFONT_H_
08
#define _GFXFONT_H_
09
10
/// Font data stored PER GLYPH
11
typedef
struct
{
12
uint16_t bitmapOffset;
///< Pointer into GFXfont->bitmap
13
uint8_t width;
///< Bitmap dimensions in pixels
14
uint8_t height;
///< Bitmap dimensions in pixels
15
uint8_t xAdvance;
///< Distance to advance cursor (x axis)
16
int8_t xOffset;
///< X dist from cursor pos to UL corner
17
int8_t yOffset;
///< Y dist from cursor pos to UL corner
18
} GFXglyph;
19
20
/// Data stored for FONT AS A WHOLE
21
typedef
struct
{
22
uint8_t *bitmap;
///< Glyph bitmaps, concatenated
23
GFXglyph *glyph;
///< Glyph array
24
uint16_t first;
///< ASCII extents (first char)
25
uint16_t last;
///< ASCII extents (last char)
26
uint8_t yAdvance;
///< Newline distance (y axis)
27
} GFXfont;
28
29
#endif // _GFXFONT_H_
первая - массив битмапов, в этом файле ее нет, поскольку это просто байтовый массив. С ним вроде все понятно. Вторая - массив глифов GFXglyph (не знаю как это по русски) - в общем, описание каждой буквы - ссылка на битмап в первом массиве, а так же ширина, высота, отступы. Третий массив описывает фонт целиком и собирает два предыдущих вместе.
Чтобы собрать кириллицу и латиницу в один фонт, массивы битмапрв просто тупо склеиваем - кириллицу в конец латиницы.
массивы глифов тоже склеиваем, но дополнительно еще надо править индексы битмапов. Поскольку кириллицу мы подклеили после латиницы, то к индексам битпама символов кириллицы нужно прибавить одно и то же число - общий размер всех битмапрв латиницы в байтах.
Следущее зависит от кодировки - если у вас между кодами ASCII последнего символа латиницы и первого кириллицы есть промежуток - нужно заполнить его "пустыми" записями глифов. Значения полей этих записей ни на что не влияют и могут быть каким угодно, но сами записи должны быть. ибо формат фонта требует, чтобы каждый символ был описан.
Далее остается только поправить значение кода последнего символа в структуре GFXfont
Как видите, правки довольно простые, но, конечно, лучше это делать не вручную, а написать какой-нить скриптик на любом подкодящем языке. типа питона или перла.
Все вышеизложенное подразумевает, что вы не меняете порядок букв в фонте. Кодировка UTF содержит русские символы по алфавиту, от А до я. Если вам нужен другой порядок - придется еще пересталять битмапы в массиве с соответвующим пересчетом всех индексов. Это не то чтобы сильно сложно, но хлопотно. В этом случае может оказаться проще не корежить фонт, а добавить в программу функцию перекодировки из "вашей" кодировки в кодировку фонта.
Всем привет, давно не был и пока к сожалению нет времени на этот проект на который сейчас самому очень больно смотреть, но оно работает же)
Конвертирую латиницу
fontconvert arialcyr.ttf 14 32 126
Кириллицу
fontconvert arialcyr.ttf 14 1040 1103
Как это объединить?
вкратце, копируйте сконвертированные данные кириллицы в любую другую книгу экселя, открывайте латиницу и добавляйте к ней скопированную кириллицу, затем в параметрах меняйте размер шрифта на новый и сохраняйте новый шрифт. копировать и вставлять можно любой блок данных по желанию: битовый, двоичный, десятичный или шестнадцатеричный, остальные блоки заполнятся автоматически. если вставлять все блоки разом, приоритет, если память не изменяет, у десятичного блока. вообще, есть возможность работать только с этим блоком, что бы не тратить время на отрисовку, если надо просто перегнать шрифт из одного в другой.
концепция редактора такая, что все строки экселя - это непрерывный массив, размер которого всегда можно изменить в параметрах. для шрифтов адафруит высота символов это по-сути максимальный размер глифа в шрифте.
Спасибо большое, разбираюсь.
Вылазит ошибкп, при попытке сконвертировать bdf шрифт в библиотеку OLED_I2C. Поправьте пожалуйста. А так конвертер четенький, под все ходовые либы. Мне не хватает еще tft_espi и сразу из ttf, но это хотелки.