Как делать шрифты для устройств на микроконтроллерах
Добавил(а) microsin
В статье рассмотрены методы изготовления простых растровых шрифтов, предназначенных для вывода на графические индикаторы (как, например, WG240128A-FFH-V или экран от NOKIA6610 - Epson S1D15G00).
Если коротко, то основные известные мне методы такие: 1. Воспользоваться программой BitFontCreator Pro 2.3. Позволяет делать растровые шрифты из шрифтов, встроенных в Windows. 2. Нарисовать символы в графическом редакторе в виде bmp-картинок и потом конвертнуть их в C-дамп или ASM-дамп (чтобы подсунуть компилятору).
[BitFontCreator Pro 2.3]
Программа интуитивно-понятна, позволяет импортировать TrueType и растровые шрифты Windows, преобразовывать их в ASM- или C-дамп, экспортировать шрифт в набор BMP-картинок. Процесс создания шрифта предполагает 5 стандартных шагов (представлены в меню кнопками) - import font (тут выбираете Windows-шрифт), edit characters table (редактируете таблицу символов и изображения символов - если это нужно), configure data format (изменяете метод, каким графическая информация распределяется по байтам знакогенератора), export bitmap data (получаете текстовый дамп знакогенератора, который можно подсунуть компилятору). Несколько замечаний по использованию программы:
1. Если программа нелицензионная, то Вас ожидают определенные неудобства - половина символов из шрифта представлена пустым дампом. Поэтому чтобы сгенерировать дампы для всех символов в таблице, приходится извращаться - делать дампы символов по частям, удалять из таблицы символов те, чей дамп Вы уже получили. При этом "пустоты" в таблице символов смещаются, и Вы получаете возможность делать дампы остальных символов (которые до этого были испорченные, пустые).
2. Удобнее всего использовать пропорциональные шрифты - у которых постоянная ширина, так как для них проще написать программное обеспечение, выводящее символ на графический индикатор. К пропорциональным шрифтам относятся, например, Courier New и Terminal (к сожалению, шрифт Terminal нерусифицирован, но зато самый маленький из пропорциональных). Недостаток пропорциональных шрифтов - они некрасивые и некомпактные, много драгоценного свободного места на экране будет тратиться впустую. Из шрифтов с переменной шириной стоит присмотреться к MS Serif и Small Fonts - они изначально рассчитаны на маленький размер.
3. Так как экраны у устройств с микроконтроллерами обычно маленькие, для импортируемых шрифтов нужно выбирать самый маленький размер 8 (иногда можно выбрать 6 или даже 5).
4. Кодировку символов лучше выбрать стандартную ANSI Windows 1251 (её удобно использовать потому, что она позволяет использовать строковые константы на русском языке в среде программирования IAR Embedded Workbench). Вот она:
c0 'А' c1 'Б' c2 'В' c3 'Г' c4 'Д' c5 'Е' c6 'Ж' c7 'З' c8 'И' c9 'Й' ca 'К' cb 'Л' cc 'М' cd 'Н' ce 'О' cf 'П' d0 'Р' d1 'С' d2 'Т' d3 'У' d4 'Ф' d5 'Х' d6 'Ц' d7 'Ч' d8 'Ш' d9 'Щ' da 'Ъ' db 'Ы' dc 'Ь' dd 'Э' de 'Ю' df 'Я' e0 'а' e1 'б' e2 'в' e3 'г' e4 'д' e5 'е' e6 'ж' e7 'з' e8 'и' e9 'й' ea 'к' eb 'л' ec 'м' ed 'н' ee 'о' ef 'п' f0 'р' f1 'с' f2 'т' f3 'у' f4 'ф' f5 'х' f6 'ц' f7 'ч' f8 'ш' f9 'щ' fa 'ъ' fb 'ы' fc 'ь' fd 'э' fe 'ю' ff 'я'
Такая кодировка (ANSI Windows 1251) лучше всего подходит, поскольку большинство программ используют именно её. Например, такая кодировка позволяет напрямую задавать и выводить русский текст в IAR Embedded Workbench.
5. Есть возможность экспортировать весь набор символов в BMP-картинки (File -> Export -> Bitmap Files of All Chars). Эта возможность хороша тем, что изображения всех символов экспортируются неиспорченные даже для нелицензионной программы (нет таких искусственных ограничений, как на создание текстового дампа символов). Поэтому если у Вас есть конвертор bmp -> текст (например, текст-дамп, понятный для C-компилятора), то создание шрифта сильно упрощается. Если Вы знакомы с программированием на Windows, то написать такой конвертор можно самому, так как формат BMP достаточно прост. Предлагаю готовый конвертор, который я написал самостоятельно (скачать можно по ссылке [1], вместе с примерами использования).
[Генерирование маленького шрифта]
В примере показана генерация миниатюрного цифрового шрифта, который я использовал для вывода напряжения питания прибора рядом с графикой "батарейки" (показывающей степень разряда аккумулятора). 10 символов шрифта (цифры от 0 до 9) подготовлены в удобном для редактирования виде - как единая монохромная картинка 090226small_digits.bmp (легко правится графическим редактором mspaint), и сконвертирована в C-текст с помощью утилиты bmptoc.exe (см. Ссылки).
Каждый символ цифры поместился в матрицу 4X6 точек, причем крайний правый столбец используется для пробела между символами (можно было бы и его убрать, но тогда неудобно было бы редактировать символы в картинке). Выводится символ на экран с помощью процедуры void DrawSmallDigit (u8 x, u8 y, char sym), детали вывода точек (процедура put_pixel) не рассматриваются - это зависит от применяемого графического индикатора.
[Другие инструменты и форматы для растровых изображений]
X BitMap, или сокращенно XBM. Это текстовый монохромный графический формат, совместимый с языком C и C++. Пример картинки в формате XBM (из Википедии):
X PixMap, или сокращенно XPM. Это текстовый графический формат с поддержкой цвета, совместимый с языком C и C++. Пример картинки в формате XPM (из Википедии):
Это утилита, которая может конвертировать файлы формата Windows Bitmap в байтовый массив, походящий для дисплеев LCD. Дополнительно для дисплеев она может создавать наборы шрифтов из системных шрифтов Windows. В результате получается код на языке C, который можно использовать в проекте с микроконтроллером.
Как ни странно, но стандартная программа для рисования, входящая в состав Windows 7, очень удобна для редактирования шрифтов. Слайдером в нижней правой части окна можно менять масштаб отображения растра шрифта, масштабирование также можно делать колесиком мыши, если удерживать клавишу Ctrl. Курсором можно удобно отпределить абсолютную коодинату каждой точки.
Ниже показан пример такого шрифта, который выполнен в виде растровой картинки (grayscale, 4 бита на точку) и набора координат каждого символа в ней, и подпрограмма для его вывода.
struct TSymData
{
char code; //код символа//координаты точки X растре:
u16 offsetStart; //начало символа
u16 offsetEnd; //конец символа
};
Это редактор растровых картинок, специально оптимизированный для создания, модификации и преобразования маленьких, среднеразмерных изображений, таких как иконки, кнопки, графика веб-страниц, спрайты и т. д. Очень хорошо подходит для редактирования монохромных изображений. Редактор очень быстрый, простой, и часто более точный и эффективный, чем большинство больших редакторов растровых изображений. В то же самое время он мощнее обычных простых редакторов иконок и лишен их ограничений.
Если Вам нужно создать, отредактировать, обрезать, поменять размер, преобразовать иконки или другие маленькие картинки, то Pixelformer может в этом помочь. Если Вы предпочитаете сложные, продвинутые редакторы изображений, то Pixelformer может быть полезен для последних быстрых редакций, подстроек, преобразований, выполнения оптимизаций.
"..к сожалению, шрифт Terminal не русифицирован...". Он такой в W7, W10. В XP нормально все - вторая половина шрифта содержит кириллицу, кодовая таблица 866 - MS-DOS.
LCD Image Converter - очень мне помогла. Особенно радует возможность менять результативный c-файл изменением шаблона, используя ключевые тэги https://www.riuson.com/lcd-image-converter/templates
Комментарии
RSS лента комментариев этой записи