Шрифты для встраиваемых систем.

Natural Spanking

✩✩✩✩✩✩✩
21 Авг 2024
4
1
Доброго времени суток, товарищи.
Предлагаю оценить генератор шрифтов на основе библиотеки FreeType.

Программа позволяет выбрать любой системный TrueType шрифт, настроить его параметры, задать нужные символы, отредактировать по желанию и сгенерировать код инициализаторов для подключения к проекту. Так же в комплекте поставляется знакогенератор, печатающий текст заданным шрифтом в буфер для вывода на дисплей.

На данный момент знакогенератор работает только с цветными дисплеями RGB565, но может быть легко адаптирован для монохромных дисплеев.

Интерфейс программы создан по образу и подобию известного в определенных кругах GLCD FontCreator. И в целом концепция очень похожа, только FreeType производит растеризацию существенно быстрее.
1724261193998.png1724262234705.png

Поддерживаются все символы юникода, и будут отрисованы, если они есть в самом шрифте. Для удобства восприятия есть группы символов, например на скриншоте созданы группы ASCI, Cyrillic и Spec (для символов Superscript). Символы имеют вертикальную развертку и требуют ориентации дисплея такой же как в Windows (левый верхний угол - точка 0;0).

Скриншоты проекта с использованием шрифтов (скриншоты с эмулятора, т.к. сам прибор в наличии уже не имею):
1724261619578.png1724261624251.png1724261767569.png

Для получения .c файла с помощью программы нужно выполнить следующие действия:
1. Font -> Select -> OK;
2. Charset -> Add group -> ввести имя группы -> OK;
3. Выбрать группу в дереве;
4. Charset -> Add symbols -> ввести коды символов юникода или выбрать пресет -> OK;
5. Font -> Repaint All;
6. Просмотреть\отредактировать символы по желанию;
7. File -> Build;

Жду предложений\пожеланий, и вообще любая критика приветствуется.
 
Изменено:
  • Лойс +1
Реакции: bort707

Natural Spanking

✩✩✩✩✩✩✩
21 Авг 2024
4
1
@bort707,
Предложений по интерфейсу и функциям)
Формат свой и не совместим с GLCD, но комплектный знакогенератор выдает такой же результат (видео буфер).
 

bort707

★★★★★★✩
21 Сен 2020
3,064
912
Честно говоря, не вполне понимаю что такое этот знакогенератор и нафига он нужен 😀
По-моему главное применение такого редактора - это создание шрифтов для использования в графических библиотеках.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
474
136
Предлагаю оценить генератор шрифтов
Возможно это для искушенных ценителей.
Нет никакого описания, примера работы. Ни в help программы, ни отдельным файлом ни ссылкой на описание, примеры.
Открыл посмотреть т.к. недавно был проект Гайвера с отрывным календарем, где он получал шрифты питоновским скриптом. Хотел посмотреть, как это делается наглядно в GUI, но для моего уровня знаний ничего не понятно.
 

Natural Spanking

✩✩✩✩✩✩✩
21 Авг 2024
4
1
@bort707,

Знакогенератор это просто функция, преобразующая битовые данные символов в цветовые данные для дисплея.
А чтобы ответить зачем он нужен, надо порассуждать над тем что такое графическая "библиотека" в контексте встраиваемых систем.
По большому счету, графическая "библиотека" это набор функций для отрисовки графических примитивов (точка, линия, треугольник, окружность и т.д.). А так же, что самое главное, текст. Даже самая простая графическая "библиотека" будет содержать три функции: для вертикальной линии, для горизонтальной линии и для текста. Еще "библиотека" может иметь или не иметь видео буфер. При наличии буфера, графика сначала отрисовывается в нем, а потом буфер полностью или частично передается в дисплей. Если буфера нет, то каждый новый пиксель передается сразу в дисплей.

Графический интерфейс пользователя обычно делится на слои\уровни. Верхний слой максимально далек от железа, нижний наоборот максимально близок.
  • Уровень экранов. Тут определяется назначение экрана и то, какие элементы на нем должны быть. Например экран главного меню, экран установки времени, экран отправки смс.
  • Уровень визуальных компонентов. Эта прослойка предоставляет вышестоящему слою визуальные компоненты такие как поля ввода, чекбоксы, переключатели и т.д.
  • Уровень графических примитивов. Это и есть графическая "библиотека". Она предоставляет вышестоящему слою функции для отрисовки примитивов, из которых состоят визуальные компоненты. И создает графическое представление текста.
  • Уровень абстрактного дисплея. Эта прослойка предоставляет вышестоящему слою функции для вывода пикселей на любой дисплей. Например для цветных TFT дисплеев это будет функция установки окна вывода и функция вывода цветовых данных.
  • Уровень драйвера дисплея. Это драйвер конкретного контроллера дисплея: SSD1306, ILI9341, ST7789 и другие. Драйвер производит инициализацию дисплея и предоставляет вышестоящему слою уже упомянутые функции, скрывая внутреннюю реализацию. Проще говоря, прячет регистры в себе. А еще драйверов может быть несколько, для поддержки нескольких дисплеев в одной прошивке (например в момент разработки был дешевле один дисплей, а через два года стал дешевле другой, и отдел закупок купил его).

Пример двух экранов с визуальными компонентами. Сами компоненты состоят из линий, залитых прямоугольников и текста. Внутри у чекбоксов картинки для красоты.
1724339484148.png1724339547017.png
Все шрифты созданы генератором из первого поста. Крупный шрифт на втором скриншоте это Times New Roman 101 размера.
Что-то я увлекся. В общем, знакогенератор это обязательная часть графической "библиотеки". Если "библиотека" уже выбрана и есть в проекте, то можно ее оставить, но не пользоваться ее внутренним знакогенератором, а скармливать ей уже отрисованный текст как картинку.
 

Natural Spanking

✩✩✩✩✩✩✩
21 Авг 2024
4
1
Нет никакого описания, примера работы. Ни в help программы, ни отдельным файлом ни ссылкой на описание, примеры.
Да... Руководств никаких нет, проект все-таки в разработке еще. Добавил краткое описание в первый пост, можно пощупать.