Программка для упаковки шрифтов LCD

Приветствую всех, камрады!
Генерировал я тут шрифты для LCD, при помощи программки SG Bitmap Font Editor. Эта замечательная программулина позволяет создавать шрифты вручную с нуля и с помощью импорта, используя встроенные системные шрифты. Позволяет также дампить сгенеренный шрифт в с — файл по заданному шаблону. В общем все чудесно, но…

Все символы у нас имеют равную ширину, т.е. шрифт моноширинный. И как правильно констатировал ув. тов. angel5a тратится много драгоценной оперативной памяти. И как указывает тот же источник — выход есть!

Убираем лишние нулевые байты у всех символов, и теперь все символы идут у нас один за другим, без дырок в заборе. Соответственно для управления нашим символьным массивом создадим структуру с двумя переменными:
typedef struct
{
 uint16_t Offset; // Смещение относительно 0 массива 
                  // (индекс первого байта искомого символа) 
 uint8_t  Width;  // Ширина символа
 
} TFontCtrl;


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

Ну и собственно написалась программка позволяющая автоматизировать процесс.



В левом поле вводим наш символьный массив между скобками {},
жмем «Получить» и в правом поле получаем проинициализированный
управляющий массив, который можно копипастить в проект. Можно сохранить в файл, нажав правой кнопой на правом поле. Также в исходный код добавляются комментарии за номером символа и собстна сам символ.

Ахтунг!
Программа предполагает что вы ввели полный набор символов т.е. 0 — 255. и байты каждого знака находятся на отдельной строке, а в конце массива обязательно стоит фигурная скобка — }.

В аттаче екзешник и на всяк случай прилепил генерилку «SG Bitmap Font Editor», мож кому сгодится.
Проект слепил на коленке по быстрому, поэтому возможны баги. Если что, свистите.
  • +1
  • 12 декабря 2011, 21:06
  • voicek
  • 1
Файлы в топике: Font_creator.zip

Комментарии (22)

RSS свернуть / развернуть
А смысл??! Сэкономив 1-2, только изредка 3-4-5 нулевых байт мы добавили по три байта на каждый символ! Выигрыш вообще есть? Мне кажется, только больше стало. Уж как минимум выкинуть байт ширины символа, его легко можно получить как разницу смещений двух соседних символов, уже 255 байт экономии.
0
  • avatar
  • ACE
  • 13 декабря 2011, 06:15
для шрифта 5х8 да, экономии не наблюдается, но когда шрифт 10х16 сказывается очень даже. Для 5х8 проще будет использовать постоянный размер массива и «магическое число» в качестве признака завершения символа. такой подход видел в инете где-то.
Для считающих каждый бит можно ещё и offset сделать восьмибитным, добавив массив переходов старшего индекса (с такого кода старший байт увеличивается на единицу, с такого ещё на единицу), в итоге таблица индексов сокращается до 256 байт плюс порядка 5 байт на таблицу переходов.
А вариант в котором даже данный способ (имеется ввиду с 3байт инфо) даст выигрыш: неполная таблица символов. Ведь найболее популярно когда таблица содержит только 96 элементов, без локалей и младших 32 байт.
0
При подобном подходе также сильно падает скорость вывода символов на экран. Не всегда это критичное по скорости место, но когда я делал что-то типа осциллографа программного — вывод текста был проблемой.
0
  • avatar
  • Tptxa
  • 13 декабря 2011, 10:54
Не столь значительна потеря производительности. при использовании фонового вывода расчет очередной последовательности успевает пройти за время вывода предидущей посылки. А если у вас такое критичное время, то вывод вы просто обязаны отправить в фон.
0
А что мешает использовать утилиту TheDotFactory — www.pavius.net/2009/07/the-dot-factory-an-lcd-font-and-image-generator/ с поддержкой любых шрифтов в том числе не моноширинных?
Заодно :) прорекламирую свою утилиту для конвертации изображений с поддержкой RLE сжатия — Bitmap2Code hobby-research.at.ua/load/utility/grafika/bitmap2code/9-1-0-22
0
Дотфактори используется для генерирования исходной таблицы, а эта утилита, на сколько я понял, упаковывает шрифт. Чего дотфактори делать не умеет. Я для такой операции писал проект, к котором шрифт на этапе компиляции подключал. меня такой вариант устраивал, т.к. перегенерировать шрифт не было нужды, и я по специальности программист.
0
Да для генерации таблиц, так как автор упаковывать умеет, TheDotFactory генерирует не моноширинные шрифты с кодировкой ширины символа, то ест по сути SG Bitmap Font Editor + утилита автора. Ладно, что хуже, что лучше, мне все равно :), я просто хотел обратить внимание что есть удобный инструмент для генерации шрифтов и все.
0
А, да, это я стормозил, пардон. Я Эту утилиту и использовал, но потом дополнительно паковал данные. А так да, в статье дотфактори и «сдублировали».
Прошу прощения, память не та стала, а внимания и небыло никогда.
0
В TheDotFactory вроде бы редактора нет. Символов после 127 чегойто не видно… И размер символов не меняется… Нет?
0
Есть для импорта системных шрифтов и их упаковки очень хорошая программа одного немца. Найти можно по этой ссылке (качать FontEditor_BitmapConverter.zip).
Пример использования есть у меня на сайте.
0
Пробовал. Редактор неплохой. Но упаковать не получилось, что с галкой, что без, выдает один символьный массив. А у вас получилось упаковать?
0
А я как раз боролся с упаковкой, потому что мне лень было распаковывать:) Та версия, на которую я дал ссылку — она без упаковки. Более поздние, емнимс, упаковывают.
0
А где взять более позднюю?
0
Сейчас поискал, и понял, что ввёл вас в заблуждение. Это как раз самая поздняя версия. Но птичка «compress font» похоже не работает всё равно. По крайней мере, на выходной файл она не влияет.
0
Вот хороший инструмент работы со шрифтами. :) жми сюда
0
Чем он хорош?
0
Лично мне он хорош тем, что я не умею программировать для винды. Формат данных могу сам задать. Программирую только авр, на асме.
0
Чтобы использовать вышеперечисленные программы не нужно уметь программировать для винды.
0
Подскажите какую нибудь программу генератор кодов для матричных индикаторов. Что бы можно было выбирать любой размер знакоместа, например 4x5, 3x5 и т.д.
0
Paint + мозги
0
LFG, гугль поможет…
0
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.