Генератор фонтов для дисплеев CX Font Generator

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Up2805",url="/forum/viewtopic.php?p=4241104#p4241104"]Да, я программист. Микроконтроллеров. Эмбеддер, если по-русски :) А вот как набросать этот ваш простой конвертОр массива вне микроконтроллера, это я не знаю. А вы можете набросать?[/uquote]Конечно. Какая разница - МК или ПК? Си он одинаков везде. А написать программу под Win ещё проще, чем для МК.
Но в принципе можно конвертор и на МК сделать, если уж под Win неохота: цепляете bin-образ исходного шрифта (в исходном формате) к образу программы-конвертора на МК; в программе его конвертируете; выводите например через UART наружу например в base64- или uuencode- формате; в терминалке записываете полученный base64- или uuencode- файл и конвертируете его в bin. Всё! Теперь этот bin можно цеплять уже к рабочей программе. Хотя этот способ конечно через одно место, но позволяет даже не ставить компилятор для ПК.

[uquote="Up2805",url="/forum/viewtopic.php?p=4241104#p4241104"]И дело не в том чтобы конвертЕр массива набросать, а дело в том, чтобы прога готовила не просто массив пикселей символа шрифта, а делала именно наиболее оптимальным способом.[/uquote]И что? В чём проблема? Если Вы - программист, пишущий программу на МК, то кому как не Вам лучше всего должно быть известно - как именно наиболее оптимально хранить шрифт в вашей программе. Программа то ведь Ваша! Значит Вам и знать как там лучше его хранить, чтобы удобнее было его использовать в программе.
100500 раз писал всякие конвертеры/пакователи шрифтов для своих прошивок. Потому как - каждый раз, на каждом МК есть свои особенные требования к формату шрифтов - в одной прошивке важнее минимальный размер памяти занимаемый шрифтом, в другой - скорость его вывода, в 3й - шрифт должен быть вертикальным, в 4й - горизонтальным, в 5й - символы удобнее паковать единым битовым потоком, в 6й - строки пикселей не должны пересекать границы байтов и т.п. Ни одна готовая программа не удовлетворяет всем требованиям полностью, во всех чего-то не хватает.
Реклама
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Сообщение Up2805 »

Словами написать на форуме конечно проще. Если умеете в коде это делать, так сделайте, плиз. Вам народ спасибо скажет. А за пустые разглагольствования общими фразами - ничего хвалебного сказать не могу.
Да и зачем делать костыли, когда есть готовые решения?
Реклама
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Up2805",url="/forum/viewtopic.php?p=4241131#p4241131"]Если умеете в коде это делать, так сделайте, плиз.[/uquote]Сделать что? Я же пишу: каждый раз под конкретную задачу пишу конвертор в формат, удобный для этой задачи. Пытаться писать что-то универсальное - затея бесперспективная.
Да и вы можете. Просто попробуйте. Это много быстрее, чем искать готовые, а потом пытаться ещё их как-то подстроить под свои нужды. Не такое это сложное дело - сконвертировать шрифт.
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Martian",url="/forum/viewtopic.php?p=4241171#p4241171"]Представьте, что Вы от и до знаете работу с графикой с STM32, а теперь Вам сказали написать что-то для Win GDI и требуется вышеприведённый код. Много тут от знаний в STM32? Даже между разными мк разница огромная и требует времени[/uquote]Когда вы малыш, то для вас ступеньки в подъезде - огромные препятствия, на которые не сразу вскарабкаешься. Каждая ступенька - это целое испытание! Но потом вы растёте, растут ваши ноги, мышцы, и шагать по ступенькам становится всё легче и легче. И наконец приходит такое время, когда вы бежите по лестнице, перепрыгивая ступеньки, почти не замечая их.... вы - выросли, ступеньки для вас - ерунда!! :)

Так и с программированием: чем больше узнаёте новых МК и архитектур/платформ, чем больше их осваиваете, тем легче и легче даются новые и новые системы и платформы.
Не надо застревать в детстве, надо расти и развиваться! Любой путь начинается с первого шага, который самый трудный. Потом будет всё легче и легче.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Сообщение Up2805 »

Одно дело когда у тебя есть время на то, чтобы узнавать новые архитектуры и платформы ради коллекции скилов, и совсем другое дело когда тебе нужен конкретный конечный результат за конкретное конечное время. Ведь чтобы написать программу для микроконтроллера, тебе не нужно сначала написать IDE, нет, ты возьмешь готовый инструмент. Так же и со шрифтами - ты выбираешь готовый оптимальный инструмент для их создания.
Иметь кучу вариантов одного и того же шрифта - бессмысленно. Потому что символ шрифта все равно будет перенесен поточечно в координаты буфера изображения. Растровый шрифт без сглаживания представляет собой упакованную битовую маску, такой вариант экономичен по занимаемому объему. А ориентацию битов и выравнивание байтов можно сохранить в описании шрифта и передать эти параметры в функцию вывода.
Реклама
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Up2805",url="/forum/viewtopic.php?p=4241325#p4241325"]Так же и со шрифтами - ты выбираешь готовый оптимальный инструмент для их создания.[/uquote]Всё было бы прекрасно, если бы такой "инструмент" был. Но такого нет. :(

[uquote="Up2805",url="/forum/viewtopic.php?p=4241325#p4241325"]Иметь кучу вариантов одного и того же шрифта - бессмысленно.[/uquote]В обуви Вы тоже ходите всегда в одной и той-же - в сапогах и зимой и летом и по грибы и на пляж, потому что иметь много разной под разные условия - бессмысленно? :))
Программы и алгоритмы бывают совершенно разные - где-то оптимальнее так, где-то - эдак. И микроконтроллеры и их ресурсы - тоже совершенно разные. Никто в своём уме не ставит один и тот же МК, например какой-нить Cortex-M7, во все возможные устройства.

[uquote="Up2805",url="/forum/viewtopic.php?p=4241325#p4241325"]Потому что символ шрифта все равно будет перенесен поточечно в координаты буфера изображения.[/uquote]Поточечно переносить, там где это можно (и нужно) сделать быстро и пословно (32-битными словами) - это верх быдлокодинга! :facepalm: Нет уж, спасибо, нам такого не нужно.

[uquote="Up2805",url="/forum/viewtopic.php?p=4241325#p4241325"]А ориентацию битов и выравнивание байтов можно сохранить в описании шрифта и передать эти параметры в функцию вывода.[/uquote]Ну да - и в слабом МК, который всегда выводит шрифт с одной и той же ориентацией и имеет единственный шрифт, получится монстроидальная функция вывода символов. С нафиг не нужным там функционалом. Которая ещё и символы будет выводить с черепашьей скоростью и всё ОЗУ и ПЗУ под одну себя сожрёт! :facepalm:
Вот результат вашего бестолкового универсализма. :dont_know:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

а редактор векторных шрифтов/графики никому не надо? а то вдруг накатило что-то и написал...
под свой формат, но он очень прост...
может прямо из сишного исходника структуры выдирать и потом сохранять в том же формате сишных структур...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ну дык вот как-то так: https://cloud.mail.ru/public/kJkX/NxsTfmhub пример исходника со встроенными внутри символами в комплекте. скачать папку целиком

программа пробует распознать в открываемом исходнике все структуры shape_t (иногда ошибается, если для их создания применять макросы), и позволяет их править интерактивно. сохраняет только эти структуры, т.е. исходный исходник уже не будет получаться. можно сохранять в h-файл, а дальше делать с ним, что угодно. просто сишник - это вручную созданные символы, если бы я сначала сделал редактор, то символы бы вынес в отдельный файл, как теперь предлагаю.

комментарии есть, думаю, всё понятно. векторы рисуются алгоритмом Брезенхама при помощи внешней функции установки пиксела, оптимизация - это уже вопрос конечного потребителя.

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

минимальный элемент - линия из двух точек, поэтому если из неё удалить одну точку, удалится вся линия целиком (это относится к режиму удаления узлов). для удобства в режиме редактирования отдельные ломаные отображаются разными цветами.

накропал буквально за пару дней, вероятно, есть какие-то баги... пока не видел

Добавлено after 1 minute 28 seconds:
да, переименовывается символ по двойному клику в списке

Добавлено after 21 minute 6 seconds:
Изображение
Вложения
screenshot-vfe.PNG
(37.4 КБ) 1019 скачиваний
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Сообщение Up2805 »

Нууууу ттаааак себе если честно. Рисование дуг окружностей не реализован? Без них многие символы будут выглядеть ужасно. А простой алгоритм Брезенхема без сглаживания будет давать хреновенький результат. Нужно будет усложнять его. В результате вместе с хреновеньким угловатым шрифтом с линиями в один пиксель получим медленную прорисовку. А для мелких шрифтов еще не факт, что "вектор" будет компактнее чем растр.
В общем, эта штука - для побаловаться пару раз.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

это же для микроконтроллерных проектов с графическими ЖКИ символы! какие дуги?! какое сглаживание?!
как вы понимаете, реализовать в редакторе можно хоть кривые Безье или сплайны, но на МК это будет слишком ресурсоемко!

Добавлено after 3 minutes 37 seconds:
и вектор не для экономии места, а для масштабирования текста. с пиксельными шрифтами нет разумного способа масштабирования, кроме как удвоение и т.п. пикселов, и результат так себе. а вот хранение в памяти шрифта большого размера, это уже накладно... а уж всякие пиктограммы и подавно.

но, разумеется, я не навязываю свое решение. мне оно поможет, и слава богу.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Родился
Сообщения: 8
Зарегистрирован: Пн дек 30, 2019 11:41:56

Сообщение Etamin »

Вектор это экономия в том смысле, что не нужно на каждый возможный размер шрифта хранить его растр в ПЗУ.

Время рисования векторного не проблема, если есть возможность растеризовать его в ОЗУ заранее и оттуда уже выводить на экран .
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Сообщение Up2805 »

какие дуги?!
Вот как в буквах О или цифрах 0, 6, 8. Без дуг это будет угловатый шрифт а-ля "наскальные надписи". Я высказал свое мнение - "нууу тааак себе способ, ниче особого", я бы такой вариант вообще ни под каким соусом не стал бы потреблять - топорно и убогенько выглядит. Шрифт для этого варианта возможен очень простой, угловато-рубленный и с тонкими однопиксельными линиями, иначе при масштабировании вылезут косяки пропорций элементов, да и много элементов излишне перегрузят построение. Не, это - только от крайней бедности ресурсов. Да и то...
если есть возможность растеризовать его в ОЗУ заранее и оттуда уже выводить на экран
Если растрировать шрифт, особенно крупный, в ОЗУ, то он займет столько места там, что не каждому МК под силу. А тем, которым под силу, у тех и флеш немаленькая. Чаще всего в продвинутых МК есть QSPI с прямым отображением в адресное пространство, откудава можно и тянуть любые растровые шрифты даже больших размеров.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

обновил своё творчество по прежней ссылке. исправил пару найденных багов, добавил возможность масштабирования сетки при рисовании символов и возможность подгрузить графический файл в качестве подложки для обводки поверх (например, если кому приспичит нарисовать карту или логотип).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11

Сообщение DimAlt »

Свежая версия CXFontGenerator от FantasyDD.
Тестирую, что добавилось:
Спойлер

Код: Выделить всё

// Имена шрифтов
/FONT_STRING/ - Параметры шрифта, строка
/FONT_NAME/   - Параметры шрифта для применения в переменных
// Имена файлов
/H_FILE_NAME/ - Имя Header файла без расширения
/C_FILE_NAME/ - Имя Source файла без расширения
// Дата
/SHORT_BITMAP_DATA/ - Данные сформированные в закладке Tools>Source Options>Bitmap, 2 Байта (0xFFFF), если не четное число байт в массиве буквы то допишет 00 к массиву каждой буквы.
/BITMAP_DATA/ - Данные сформированные в закладке Tools>Source Options>Bitmap, 1 байт (0xFF)
/CHAR_DATA/   - Данные сформированные в закладке Tools>Source Options>Char
// Переменные с Font
/NUMBER_OF_CHARS/ - Число символов в списке
/FIRST_CHAR/ - Код первого символа в списке
/LAST_CHAR/  - Код последнего символ в списке
/MAX_WIDTH/  - Максимальная ширина всех битмапов (X)
/MAX_HEIGHT/ - Максимальная высота всех битмапов (Y)
/INDENT_TOP/    - Отступ с верху
/INDENT_BOTTOM/ - Отступ с низу
/INDENT_LEFT/   - Отступ с лева
/INDENT_RIGHT/  - Отступ с права
/SPASE_CHARACTER_WIDTH/  - Ширина символа пробела, если он есть в  Font>>Bitmaps list (X) если нет то берем с Font>>Space>>Space Size: (Ширина и высота указанной буквы)
/SPASE_CHARACTER_HEIGHT/ - Высота символа пробела, если он есть в Font>>Bitmaps list(Y) если нет то берем с Font>>Space>>Space Size: (Ширина и высота указанной буквы)
/Y_ADVANCE/ - Максимальная высота битмапа из списка с отступами /INDENT_TOP/+/MAX_HEIGHT/+/INDENT_BOTTOM/ для AdaFruit GFX описание здесь: Font Format https://glenviewsoftware.com/projects/products/adafonteditor/adafruit-gfx-font-format/

В закладке Sourse >> Bitmap >> есть возможность для Adafruit читать вертикальными байтами с лево на право.
https://drive.google.com/file/d/1Vvf1Wo ... share_link
Контактная информация:
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11

Сообщение DimAlt »

Код для ардуино позволяющий выводить шрифты с русскими символами сгенерированные с помощью CXFontGenerator. Тестировал на библиотеках Arduino_GFX_Library и TFT_eSPI,
небольшое видео

https://disk.yandex.ru/d/toTwb2qyAkX2Sw
Контактная информация:
Ответить

Вернуться в «Периферия»