FastFont - самописная рисовалка растровых шрифтов

В ходе экспериментов с китайскими клонами дисплея Nokia 3310, очень захотелось написать простой и одновременно функциональный редактор для шрифта 8x5. В результате получилась небольшая программка на си билдере, которую вместе с исходниками решил опубликовать для сообщества :) Надеюсь кому-то пригодиться, а критика и конструктивные замечания приветствуются.


Краткий перечень возможностей программы (v0.03):
  • быстрое рисование точек растра при помощи мыши (левой кнопкой — ставим точку, правой — удаляем)
  • предпросмотр символа с регулировкой масштаба
  • копипаст HEX значений посредством буфера обмена (автоматическое преобразование шестнадцатеричных чисел с текстовой строки буфера)
  • таблица символов CP1251 для справки
  • экспорт шрифта в заголовочный файл C/C++ (*.h)

За основу взял кодировку Windows-1251. Символы 0x20 — 0x7F (стандартные ASCII), 0xC0 — 0xFF (кириллица CP1251) и некоторые другие уже прорисованы. Остальные для экономии памяти МК можно не использовать вообще, или же прикрутить например псевдографику :)


Пример экспортируемого шрифта:

   { 0x00, 0x00, 0x5F, 0x00, 0x00 },   // ! 0x21  33
   { 0x00, 0x07, 0x00, 0x07, 0x00 },   // " 0x22  34
   { 0x14, 0x7F, 0x14, 0x7F, 0x14 },   // # 0x23  35
   { 0x24, 0x2A, 0x7F, 0x2A, 0x12 },   // $ 0x24  36
   { 0x4C, 0x2C, 0x10, 0x68, 0x64 },   // % 0x25  37
   { 0x36, 0x49, 0x55, 0x22, 0x50 },   // & 0x26  38
   { 0x00, 0x05, 0x03, 0x00, 0x00 },   // ' 0x27  39
   { 0x00, 0x1C, 0x22, 0x41, 0x00 },   // ( 0x28  40
   { 0x00, 0x41, 0x22, 0x1C, 0x00 },   // ) 0x29  41
   { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // * 0x2A  42
   { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // + 0x2B  43
   { 0x00, 0x00, 0x50, 0x30, 0x00 },   // , 0x2C  44
   { 0x10, 0x10, 0x10, 0x10, 0x10 },   // - 0x2D  45
   { 0x00, 0x60, 0x60, 0x00, 0x00 },   // . 0x2E  46
   { 0x20, 0x10, 0x08, 0x04, 0x02 },   // / 0x2F  47
   { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0 0x30  48
   { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1 0x31  49
   { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2 0x32  50
   { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3 0x33  51
   { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4 0x34  52
   { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5 0x35  53
   { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6 0x36  54
   { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7 0x37  55
   { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8 0x38  56
   { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9 0x39  57


Downloads:
FastFont_v0.03.7z
FastFont_v0.03_source.7z
Пример экспорта — FastFont.h
  • +10
  • 07 августа 2011, 14:19
  • XANDER
  • 1
Файлы в топике: FastFont.zip

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

RSS свернуть / развернуть
А что за ползунок справа в главной форме?
0
Судя по частоколу тиков — код текущего чара.
0
Да, так и есть :)
0
Признаюсь, прогу еще не запускал, но:
левой кнопкой — ставим точку, правой — удаляем
Неплохо-бы сделать установку/удаление точек при движении мыши с зажатой кнопкой.
0
Уже реализовано + много других мелочей
0
А есть импорт Windows-шрифтов?
0
  • avatar
  • oco
  • 08 августа 2011, 11:48
Пока нет, при желании можно реализовать.
0
Я пробовал это. Есть импорт шрифтов и экспорт в C. Чем FastFont лучше?
0
  • avatar
  • oco
  • 08 августа 2011, 12:55
Home made, open source.
0
:)
Тогда желаю удачи.
Если есть возможность сделать импорт шрифтов и не ограничивать размером 8х5, будет неплохо…
0
Возможно в будущем, при экспериментах на дисплеях с разрешением побольше. Пока что для LCD от 3310 такого редактора более чем достаточно.
0
ИМХО, основное чего не хватает — возможности отрендерить (импортировать) уже имеющийся шрифт. Самому рисовать… Немного не то.
0
Сейчас только импорт «Вставить HEX с буфера» — любая текстовая строка с шестнадцатеричными значениями (минимум одно), разделены любыми символами или вообще не разделены ничем.

Согласен, импорт шрифта полезная фича, правда при маленьком размере (например как сейчас 8x5) TrueType вектор смотрится не очень красиво, проще рисовать самому.

Todo на будущее:
+ Задание произвольного размера символов шрифта
+ Импорт символов из *.ttf
+ Предпросмотр текста, а не только одного символа
0
Во многих шрифтах, спецом для малых разрешений, есть специальные подсказки по растеризации. Так что если подобрать шрифт — возможно будет не так плохо.
Кроме того, в винде до сих пор сохранилось и несколько точечных шрифтов.
0
На мой взгляд при размере 8x5 особо не разгуляешься. Желательно 8x8 и выше.

Только что установил MikroElectronika GLCD Font Creator (заинтересовал меня комментарий oco), что то не очень впечатлило. Понравилась лишь Batch обработка символов. Импорт немного мутноватый: необходимо новый шрифт создавать, нельзя импортировать поштучно символы в текущий шрифт. Preview без масштабирования, в каких то адских цветах, выбор сугубо ограничен. Экспорт не информативный, заточен под ихнюю X-GLCD Lib (одномерный массив, сплошняком без комментариев).
0
А у них все так.
0
Из бесплатных это единственный вменяемый редактор, наряду с SG Bitmap Font Editor. Уже, правда, не помню, что-то мне в нем не понравилось.
0
Из бесплатных это единственный вменяемый редактор, наряду с SG Bitmap Font Editor. Уже, правда, не помню, что-то мне в нем не понравилось.
А в одномерности ничего страшного нет, формат понятный.
0
Вроде, там импорта нет
0
SG Bitmap Font Editor — реально достойная программа! Старая, но очень продумана. Жаль что раньше не видел… Почерпнул много интересных идей, возможно в будущем допилю свою FastFont :)

Импорт там есть: выделяем справа с помощью Ctrl символы (или все сразу Ctrl+A) потом меню Tools->Create font…

Жаль только масштаб роликом мыши не регулируется ("+" и "-" на клавиатуре).

Понравились такие фичи:
* отображение всех символов сразу, очень наглядно;
* Ctrl + клик по Canvas для рисования — выбор символа;
* Font Test (Ctrl + T) — пишем новоиспеченным шрифтом;
* полноценное меню Edit, Undo — возвращает 10 операций;
* скриптовый язык посредством COM объектов (круто для таких целей);
* даже печать есть.

Кастомизация экспорта посредством COM — мощный инструмент, можно сделать что угодно на любом языке программирования (хотя новичкам наверное будет сложно раскуривать такую тему), на мой взгляд лучше в самой программе реализовать более навороченный экспорт, профи так или иначе сделают то что им нужно ;)
0
классная прога, только у меня под семёрой не получилось экспорт намутить. Попробую под ХР
0
Спасибо за прогу, намутил с помощью неё знакогенератор для TFT дисплея 480х272, как раз получилось 80х34 символа, почти терминал вышел… :)
0
  • avatar
  • alx32
  • 08 февраля 2013, 10:17
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.