Содержание
Здравствуй, %username%. В этой статье я хотел бы рассказать про свой небольшой проект, призванный при помощи одного велосипеда и небольшой связки костылей слегка упростить жизнь embedded-разработчику, имеющего дело с графическими дисплеями или платами OSD.
Интро
Однажды мне довелось увидеть, как силами коллеги создаются шрифты для платы OSD, которая должна была быть затем установлена в монитор. Увиденное ввело меня в легкий ступор и заставило зашевилиться волосы на голове (картинка кликабельна).
Сначала каждый символ прорисовывался на листе в клетку. Затем изображение каждого символа в тетради вручную переводилось в массив байт и помещалось в исходники прошивки. На создание каждого символа уходило около часа кропотливой работы. Осознание того, что за окном уже заканчивается 2016 год, и тетрадь в клетку не является оптимальным средством для достижения цели, подтолкнуло меня… нет, не на написание своего решения, а на поиск уже готового. Однако, беглый поиск показал, что большинство имеющихся решений содержат хотя бы один из перечисленных недостатков:
- небесплатны (иногда цена приближалась к 100 евро);
- заточены под определенный формат (количество бит на пиксель, размер символа и кодирование цветов);
- поддерживают только символы из стандартного набора шрифтов (зачастую на OSD приходится выводить совершенно отличные от букв, цифр и стрелочек символы).
На пути к велофабрике
Желание сделать мир чуть лучше и пара свободных вечеров вылились в небольшую утилиту командной строки — PixelPixie. На вход программа получает файл с изображением, на котором через равные промежутки (для этого проще всего использовать сетку) изображены символы будущего шрифта. Настройки генератора шрифта хранятся в JSON файле. Все цвета, использованные при рисовании символов, необходимо поставить в соответствие с последовательностью бит. Последовательность задается в десятичном виде.
Генератор, обрабатывая изображение, побитово составит выходной массив. Одной из важных особенностей PixelPixie является то, что она может работать с любым количеством бит на пиксель. Например, часто требуется кодировать каждый пиксель 2 или 3 битами. Сами символы могут так же быть произвольного размера и находиться в сетке с произвольным количеством столбцов и строк. Таким образом, я попытался сделать генератор максимально независимым от конкретного устройства, для которого генерируется шрифт.
Дополнительно PixelPixie умеет создавать изображение с пустой сеткой. Разработчику остается в любимом растровом редакторе "вписать" символы в ячейки сетки и дважды щелкнуть по batch-скрипту, который запускает PixelPixie. Теперь процесс работы над шрифтом выглядит примерно так:
На выходе мы получаем массивы, готовые для копипасты в исходник прошивки управляющего микроконтроллера.
И наблюдаем наш шрифт на экране ЖК-дисплея, подключенного к плате OSD.
Вместо заключения
Использование PixelPixie для разработки шрифтов платы OSD позволило сократить время работы над каждым символом с часа до 10 минут в самых сложных символах. Конечно, разработчику все еще приходится попиксельно вырисовывать каждую букву и по несколько раз проверять, как она отображается на конечном устройстве, но количество рутины удалось сократить в несколько раз.
Исходный код PixelPixie доступен на GitHub.
Сайт об электронике и не только
Символьный генератор
Данная программа предназначена для генерации массива символов для графических дисплеев. Она может генерировать, как символы обычного размера 5х8, так и символы размеров в 2 раза больше стандартного 10х16.
Пример использования массивов символов и функции отображения символов
Данные шрифты используются на дисплее от сотового телефона Nokia 3310 и на всех последующих проектах с монохромными графическими дисплеями:
Эти шрифты подойдут и к другим графическим дисплеям (например: дисплеям на контроллере KS0108B), которые схожи по организации памяти.
- Программа открывается по центру рабочего стола, а не по центру рабочей области всех рабочих столов;
- При двойном клике на строчку кода сформированного символа — символ отобразиться на рабочей области;
- Добавлена возможность сохранения сгенерированного кода.
Программа обновлена 09.01.2017
Статья обновлена 09.01.2017
9 комментариев на « Символьный генератор»
САНЕК пишет 13.01.2011 в 10:35 #
Ни чего подобного,по простоте в обращении,ещё не встречал.Хотя есть пара буржуйских прог,но всё это не то!
Респект автору.
Если в будующем появится прога на весь 3310 (84х48) это будет фантастика.
Творческих успехов.
Alex_EXE пишет 14.01.2011 в 15:14 #
Если в будующем появится прога на весь 3310 (84х48) это будет фантастика.
valexus пишет 17.01.2011 в 00:24 #
Прога на весь экран nokia 3310 есть , FastLcd называеться , только она сохраняет масив в формате бейсика , потом обязательно надо в виндовсовском блокноте формат заменить на сишный или еще какойто (делов на несколько секунд).
САНЕК пишет 23.01.2011 в 10:05 #
Alex_EXE
Спасибо за Ваш труд.
Проверил,очень удобно.
Игорь пишет 12.03.2011 в 16:06 #
Скачал » штобы было». Но всё-же огромное СПАСИБО .
Лёха пишет 05.04.2014 в 21:06 #
Я как дурак в пейнте рисовал и в калькуляторе переводил. Спасибо
H`UGO пишет 18.06.2014 в 21:53 #
Отличная прога! А возможно не фиксировать размер, а устанавливать скажем не только 5х8 и 10х16, а в диапозоне? Допустим выставил 14 х 24, и колдуешь.
Cyrill пишет 05.03.2015 в 16:15 #
Собрал проэкт в Keil 4 с русским шрифтом борода, не отображает ни на одном дисплее вместо выводит символы C & P
Alex_EXE пишет 10.03.2015 в 01:47 #
Сайт об электронике и не только
Символьный генератор
Данная программа предназначена для генерации массива символов для графических дисплеев. Она может генерировать, как символы обычного размера 5х8, так и символы размеров в 2 раза больше стандартного 10х16.
Пример использования массивов символов и функции отображения символов
Данные шрифты используются на дисплее от сотового телефона Nokia 3310 и на всех последующих проектах с монохромными графическими дисплеями:
Эти шрифты подойдут и к другим графическим дисплеям (например: дисплеям на контроллере KS0108B), которые схожи по организации памяти.
- Программа открывается по центру рабочего стола, а не по центру рабочей области всех рабочих столов;
- При двойном клике на строчку кода сформированного символа — символ отобразиться на рабочей области;
- Добавлена возможность сохранения сгенерированного кода.
Программа обновлена 09.01.2017
Статья обновлена 09.01.2017
9 комментариев на « Символьный генератор»
САНЕК пишет 13.01.2011 в 10:35 #
Ни чего подобного,по простоте в обращении,ещё не встречал.Хотя есть пара буржуйских прог,но всё это не то!
Респект автору.
Если в будующем появится прога на весь 3310 (84х48) это будет фантастика.
Творческих успехов.
Alex_EXE пишет 14.01.2011 в 15:14 #
Если в будующем появится прога на весь 3310 (84х48) это будет фантастика.
valexus пишет 17.01.2011 в 00:24 #
Прога на весь экран nokia 3310 есть , FastLcd называеться , только она сохраняет масив в формате бейсика , потом обязательно надо в виндовсовском блокноте формат заменить на сишный или еще какойто (делов на несколько секунд).
САНЕК пишет 23.01.2011 в 10:05 #
Alex_EXE
Спасибо за Ваш труд.
Проверил,очень удобно.
Игорь пишет 12.03.2011 в 16:06 #
Скачал » штобы было». Но всё-же огромное СПАСИБО .
Лёха пишет 05.04.2014 в 21:06 #
Я как дурак в пейнте рисовал и в калькуляторе переводил. Спасибо
H`UGO пишет 18.06.2014 в 21:53 #
Отличная прога! А возможно не фиксировать размер, а устанавливать скажем не только 5х8 и 10х16, а в диапозоне? Допустим выставил 14 х 24, и колдуешь.
Cyrill пишет 05.03.2015 в 16:15 #
Собрал проэкт в Keil 4 с русским шрифтом борода, не отображает ни на одном дисплее вместо выводит символы C & P
Alex_EXE пишет 10.03.2015 в 01:47 #