Glcd font creator не сохраняет файлы
Добрый день! Очень надеюсь на помощь: я создала свой шрифт в программе Font Creator, но в итоге в программе корректно отображаются только цифры, а буквы этим шрифтом не читаются. К тому же, вместо пробела между словами стоит 0. Подскажите, пожалуйста, как можно решить эту проблему?
suntory
Administrator
Ответ: Не читается созданный шрифт. Как решить проблему?
Упакуйте в zip то что получилось и заодно файл Font Creator и прикрепите сюда.
Black_Sunrise
Участник
Прикрепила, но, по-моему, сам файл шрифта и файл ФонтКреатор - одно и то же, по крайней мере, когда я сохраняю в ФК шрифт, то получается ttf-ный файл и все. Или я что-то неправильно делаю?
Вложения
suntory
Administrator
Ответ: Не читается созданный шрифт. Как решить проблему?
Ну у меня FontCreator нет, я предположил просто что у него есть свой формат файлов, попробую поставить и придумать что там можно сделать.
Black_Sunrise
Участник
Ответ: Не читается созданный шрифт. Как решить проблему?
Спасибо огромное!
Могу прикрепит инсталл программы, если это не запрещено правилами
suntory
Administrator
Ответ: Не читается созданный шрифт. Как решить проблему?
Я сам найду, правилами скорее запрещено.
Black_Sunrise
Участник
Denisbox
Ответ: Не читается созданный шрифт. Как решить проблему?
Black_Sunrise
Я подправил ваш шрифт - должен показывать все знаки.
Почему не работал: были построены не все знаки относящиеся к Basic Latin, а это грозит или неправильной работой шрифта или отсутствием символов при наборе.
Что хотелось бы вам посоветовать:
1. Не пользуйтесь программой Font Creator и подобных ей, лучшее решение - TypeTool (имхо) или Fontlab.
TypeTool это урезанная версия программы FontLab, если вы не будите создавать сложных OpenType шрифтов с большим количеством фич - на мой взгляд самый лучший выбор.
2. Почитайте спецификацию шрифтового формата - нудно, но это необходимо.
3. Начинайте изучение шрифтов с формата Type1 - самый простой формат шрифта с 256 знаками - прекрасная база для того, что бы начать заниматься шрифтами (имхо)
Известная тема графических дисплеев — необходимость носить шрифты с собой.
Задача:
— IAR, STM32;
— есть дисплей 128х64 OLED(монохром);
— нужен один хороший шрифт с Кириллицей;
— нужна приемлемая читаемость и размер;
— нужна хорошая плотность записи на экране;
— нужно вводить строки прямо в коде программы, не задумываясь над кодировками.
Итак, начнём решать задачи.
1) Дабы вводить строки прямо в программе определимся с кодировками. Решил проверить кодировки, а именно, понять как они проходят внутрь контроллера через компилятор.
Пишем небольшой код:
Запускаем код на контроллере, останавливаемся и смотрим получившиеся значения HEX в отладчике:
Ищём в этих ващих интернетах g: 0xС0 for cyrillic A. Подсказывает, что это может быть кодировка Windows-1251. Смотрим кодировку исходников — Windows-1251, надеюсь это она. Проверяем.
Открываем «Таблицу символов» (у меня Win7). Открываем какой-нибудь шрифт с Кириллицей. Внизу окна ставим галочку «дополнительные параметры», выбираем «Набор символов» — «Windows: Кириллица» (что соответствует кодировке Windows-1251). Теперь выбираем символы, для которых мы получили коды в отладчике, и смотрим их коды внизу окна. Совпадает! (Знаю, что я наркоман, можно было и в инете посмотреть таблицы, но вдруг такой способ кому-то когда-то сгодится.) Значит в память контроллера попадают строки в кодировке Windows-1251.
2) Теперь нужно как-то создать шрифты и запихать их в память контроллера.
Мне попалась под руку программа GLCD Font Creator.
Программа позволяет
— создавать свои растровые шрифты с нуля;
— растеризовать существующие в системе Windows шрифты и модифицировать полученный результат;
— создавать программное представление для хранения шрифтов в виде массивов.
По хорошему, эти ребята ориентируются на различные, в т.ч. знакосинтезирующие индикаторы, у них своя библиотека. Но я хочу их попользовать в своих грязных делишках, не используя их библиотеку, и вообще облегчить всё в пределах разумной экономии места в памяти и моего времени.
Открываем программу, выполняем File -> New Font -> Import An Existing System Font.
Выбор пал на шрифт Verdana минимального размера, понравился он мне.
Выбираем диапазон значений символов, которые хотим использовать (32-255). Нажимаем кнопочку возле «Remove», чтобы он самостоятельно не удалял пустые строки и столбцы, это мне не нужно.
Получили шрифт размером 12x13.
Если просмотреть все символы, видно, что отсутствует Кириллица и верхняя строка не используется в печатаемых символах, а 12 пикселей по высоте мне нравится больше, ибо 64/12 = 5 строк на дисплее. Удалим верхнюю строку, получим шрифт размером 12x12.
Потом нажимаем полшебную клавишу «Export . » и получаем код на C:
Выделяем и копируем оттуда только то, что нужно, то есть печатаемые символы. Вот кусок:
Ок, кусок с печатаемыми латинскими символами мы отхомячили. Теперь нужно найти, где же символы Кириллицы.
Как видим, в данном случае выбора кодировки нам не предоставили. Где же Кириллица?
Есть подозрение, что используется Юникодный набор для растеризации. Идём в таблицу символов, находим там Юникодную Кириллицу, точнее её коды.
0x0410 для буквы «А» и 0x044F для буквы «я», все буквы подряд. Создаём новый шрифт, с символами с 1040 (0x0410) по 1103 (0x044F).
Бинго! Получили нужные символы.
Преобразуем в код, получаем ещё один массив только для Кириллицы.
Теперь обратимся к обработке данных шрифтов на контроллере.
Для кодировки одного символа используется следующая строка:
Теперь про обработку всего этого хозяйства процедурно.
Латинские и специальные печатные символы (скобки, знаки препинания) начинаются от значения 0x20 (32 «для пробела») до 0x7E (126 «тильда»), можно конечно захватить ещё 0x7F («неразнывный пробел»), но оно нам надо? Мне нет — не буду включать сюда.
Таким образом таблица для латинских и специальных символов будет содержать коды от 0x20 до 0x7E.
Далее в нашей Windows-1251 до самой Кириллицы идут непечатаемые символы, а затем сама Кириллица от 0xC0 до 0xFF.
Под неё сделаем вторую таблицу. Снова отрезаем верхний ряд пикселей, у «И краткой» немного шапочку съели, не умрёт, и так нормально…
В массиве комментарии смешные, конечно не соответствующие действительным символам.
Теперь сама процедура.
Символы закодированы таким образом:
— в первом байте лежит ширина символа, как мы ранее выяснили;
— в следующих байтах лежат вертикальные столбцы пикселей, младшими битами к верху. Высота дополнена до полного количества байт. То есть для символа высотой больше 8 пикселей (и меньше 17ти) для каждого вертикального столбца будет задействовано два байта;
— столбцы лежат друг за другом в порядке слева направо.
Подправили «unsigned short» на «uint8_t» для шрифтов, ну и пишем процедуру вывода строки… Можно было использовать нуль-терминированную строку, но я почему-то не стал.
Процедуры PutPixel(a, b); и ErasePixel(a, b); для своих дисплеев прописывайте сами, ибо у всех по-разному. У меня так:
В коде не хватает проверки на корректность ввода, т.е. при вводе чего-то непечатаемого, оно пройдёт с ошибкой, то есть неправильно, ибо захапает какую-то левую память и всё нафиг может рухнуть. Доработать код можете и сами, но можно и меня попросить :)
Ну вот и всё, выводим строки!
В ходе экспериментов с китайскими клонами дисплея Nokia 3310, очень захотелось написать простой и одновременно функциональный редактор для шрифта 8x5. В результате получилась небольшая программка на си билдере, которую вместе с исходниками решил опубликовать для сообщества :) Надеюсь кому-то пригодиться, а критика и конструктивные замечания приветствуются.
- быстрое рисование точек растра при помощи мыши (левой кнопкой — ставим точку, правой — удаляем)
- предпросмотр символа с регулировкой масштаба
- копипаст HEX значений посредством буфера обмена (автоматическое преобразование шестнадцатеричных чисел с текстовой строки буфера)
- таблица символов CP1251 для справки
- экспорт шрифта в заголовочный файл C/C++ (*.h)
Пример экспортируемого шрифта:
-
, , ,
- +10
- 07 августа 2011, 14:19
- 1
Ищем еще варианты латиница и кириллица 5*8:
Комментарии ( 22 )
:)
Тогда желаю удачи.
Если есть возможность сделать импорт шрифтов и не ограничивать размером 8х5, будет неплохо…
Возможно в будущем, при экспериментах на дисплеях с разрешением побольше. Пока что для LCD от 3310 такого редактора более чем достаточно.
ИМХО, основное чего не хватает — возможности отрендерить (импортировать) уже имеющийся шрифт. Самому рисовать… Немного не то.
Сейчас только импорт «Вставить HEX с буфера» — любая текстовая строка с шестнадцатеричными значениями (минимум одно), разделены любыми символами или вообще не разделены ничем.
Согласен, импорт шрифта полезная фича, правда при маленьком размере (например как сейчас 8x5) TrueType вектор смотрится не очень красиво, проще рисовать самому.
Todo на будущее:
+ Задание произвольного размера символов шрифта
+ Импорт символов из *.ttf
+ Предпросмотр текста, а не только одного символа
Во многих шрифтах, спецом для малых разрешений, есть специальные подсказки по растеризации. Так что если подобрать шрифт — возможно будет не так плохо.
Кроме того, в винде до сих пор сохранилось и несколько точечных шрифтов.
На мой взгляд при размере 8x5 особо не разгуляешься. Желательно 8x8 и выше.
Только что установил MikroElectronika GLCD Font Creator (заинтересовал меня комментарий oco), что то не очень впечатлило. Понравилась лишь Batch обработка символов. Импорт немного мутноватый: необходимо новый шрифт создавать, нельзя импортировать поштучно символы в текущий шрифт. Preview без масштабирования, в каких то адских цветах, выбор сугубо ограничен. Экспорт не информативный, заточен под ихнюю X-GLCD Lib (одномерный массив, сплошняком без комментариев).
Из бесплатных это единственный вменяемый редактор, наряду с SG Bitmap Font Editor. Уже, правда, не помню, что-то мне в нем не понравилось.
Из бесплатных это единственный вменяемый редактор, наряду с SG Bitmap Font Editor. Уже, правда, не помню, что-то мне в нем не понравилось.
А в одномерности ничего страшного нет, формат понятный.
SG Bitmap Font Editor — реально достойная программа! Старая, но очень продумана. Жаль что раньше не видел… Почерпнул много интересных идей, возможно в будущем допилю свою FastFont :)
Импорт там есть: выделяем справа с помощью Ctrl символы (или все сразу Ctrl+A) потом меню Tools->Create font…
Жаль только масштаб роликом мыши не регулируется ("+" и "-" на клавиатуре).
Понравились такие фичи:
* отображение всех символов сразу, очень наглядно;
* Ctrl + клик по Canvas для рисования — выбор символа;
* Font Test (Ctrl + T) — пишем новоиспеченным шрифтом;
* полноценное меню Edit, Undo — возвращает 10 операций;
* скриптовый язык посредством COM объектов (круто для таких целей);
* даже печать есть.
Кастомизация экспорта посредством COM — мощный инструмент, можно сделать что угодно на любом языке программирования (хотя новичкам наверное будет сложно раскуривать такую тему), на мой взгляд лучше в самой программе реализовать более навороченный экспорт, профи так или иначе сделают то что им нужно ;)
Здравствуйте. Тема возможно нестандартная для этого форума. Интересуют не стилизованные под bitmap, а именно настоящие монохромные моноширинные .bdf шрифты. Я инженер-электронщик и работать с таким древним форматом шрифтов меня заставляют производственные задачи.
Я эти шрифты использую для вывода текста на экран устройства на микроконтроллере. Весь низкоуровневый софт написан именно под .bdf, по этому нужен именно такой формат. Разработкой шрифтов и самого дизайна монохромного меню занимается отдельный человек-дизайнер. И для него мне требуется обеспечить инструментарий. Он должен иметь возможность загружать готовые bdf шрифты, создавать их с нуля, редактировать, так же писать этими шрифтами нечто на подгружаемом холсте-картинке .BMP. Когда всё готово, он должен выгрузить шрифт и передать мне в формате .bdf.
В чем сложности и что я уже попробовал:
1. Работать желательно в windows. А устанавливать в него bdf шрифты как есть невозможно. А преобразование в ttf меняет что-то в символах и при вставке в paint например такой шрифт приобретает градиент по краям буквы, что уже не делает его монохромным.
2. Как ни удивительно, программ, в которые можно напрямую подгрузить bdf шрифты и писать ими на холсте, я не нашел. Есть paintCAD, но он работает со своим типом шрифтов, которые родить из bdf через разные конвертеры у меня так и не получилось. Есть bdftopcf утилита, но она выдает набор пустых символов.
3. Пытался использовать font forge, изменять bdf шрифты получается, но при этом конвертировать их в тот же pcf для paintCAD не выходит.
В общем эта проблема может иметь много решений, я тыкался в разные, но везде возникает какой-нибудь затык. Нужно иметь возможность смотреть на шрифт на холсте, соответствующем размеру экрана дисплея в пикселях и выводить шрифт на этот холст чтобы он выглядел так же как на экране.
Надеюсь, опытные люди подскажут что юзать. Чувствую, что решение где-то рядом, но где?
Пройдут и Linux утилиты если их можно запустить через bash в win10.
_MBK_
Пикирующий бомбардировщик
Бррр не так быстро и по порядку. Я правильно понимаю - это - специфический формат растровых шрифтов для применения в контроллерах? Тогда зачем вам устанавливать их в windows где вообще работа со шрифтами идеологически другая? Тем более в векторный ttf конвертировать, что звучит чудовищно.
Что есть paintCAD? Если это то что я подумал - я оценил новогоднюю шутку, хаха?
Однозначно надо сначала как-то упростить задачу использования шрифтов, поэтому будем искать только моноширинные, т.е. у всех символов одинаковая ширина.
Почему именно надо 8 точек по высоте на символ?
LCD экраны обычно изготовлены для вывода символов именно 8 точек по высоте.
Для термо принтеров это наоборот не проблема , т.к. обычно самый дешевый принтер имеет 384 по ширине и можно шириной 5+1(пробел) выводить 64 символа в строке , но это реально очень мелко. И приходится удваивать, утраивать точку прорисовки банальным повтором точки по горизотнтали и по высоте. При этом качество самого такого символа как-бы желает быть лучше.
Если использовать 16*16 символ X-GLCD , то в строке печатается 24 символа - ТО , ЧТО НАДО для визуального восприятия. Но на один символ уйдет примерно 37 байт, вместо 5 байт при 5*8 microC GLCD Lib.
А если мы хотим в микроконтроллер приличную часть юникода загрузить, с поддержкой Европы и не только ?
Теперь у console находим только 5*9 с возможностью обрезать сверху/ снизу , но это не есть Гут.
Ищем короче размер 5*8 среди других моноширинных шрифтов:
Находим Courier New 7 обычный (32 .. 127) -> 5*8 сразу четкое попадание.
Теперь мы хотим допустим добавить кириллицу в свой набор.
А вот для кириллицы 0x04xx юникод для Courier New 7 обычный получаем уже 5*11 , т.к. большие Ё, Й сверху имеют точечки,завитушки. И их отрезать нельзя никак.
console обычный (пробуем для латиницы 32 .. 127)
16 : Consolas12x21 (X-GLCD : 1 символ 37 байт)
8 : Consolas6x11 (X-GLCD : 1 символ 13 байт)
7 : Consolas5x9 (можно убрать сверху ряд - microC GLCD Lib : 1 символ 5 байт)
6 : Consolas4x9 (можно убрать сверху ряд - microC GLCD Lib : 1 символ 5 байт)
При экспорте выбираем обязательно microC GLCD Lib. Это формат представляет символ 5*8 как 5 байт.
Но есть нюанс , если НЕ убрать вручную ряд или столбец , то вариант microC GLCD Lib может быть не доступен. Глюк это или защита каких-то прав .
Логично мы столбец должны вписать в 1 байт (8 точек) и если высота больше 8 символа, то это не получится.
Комментарии ( 22 )
:)
Тогда желаю удачи.
Если есть возможность сделать импорт шрифтов и не ограничивать размером 8х5, будет неплохо…
Возможно в будущем, при экспериментах на дисплеях с разрешением побольше. Пока что для LCD от 3310 такого редактора более чем достаточно.
ИМХО, основное чего не хватает — возможности отрендерить (импортировать) уже имеющийся шрифт. Самому рисовать… Немного не то.
Сейчас только импорт «Вставить HEX с буфера» — любая текстовая строка с шестнадцатеричными значениями (минимум одно), разделены любыми символами или вообще не разделены ничем.
Согласен, импорт шрифта полезная фича, правда при маленьком размере (например как сейчас 8x5) TrueType вектор смотрится не очень красиво, проще рисовать самому.
Todo на будущее:
+ Задание произвольного размера символов шрифта
+ Импорт символов из *.ttf
+ Предпросмотр текста, а не только одного символа
Во многих шрифтах, спецом для малых разрешений, есть специальные подсказки по растеризации. Так что если подобрать шрифт — возможно будет не так плохо.
Кроме того, в винде до сих пор сохранилось и несколько точечных шрифтов.
На мой взгляд при размере 8x5 особо не разгуляешься. Желательно 8x8 и выше.
Только что установил MikroElectronika GLCD Font Creator (заинтересовал меня комментарий oco), что то не очень впечатлило. Понравилась лишь Batch обработка символов. Импорт немного мутноватый: необходимо новый шрифт создавать, нельзя импортировать поштучно символы в текущий шрифт. Preview без масштабирования, в каких то адских цветах, выбор сугубо ограничен. Экспорт не информативный, заточен под ихнюю X-GLCD Lib (одномерный массив, сплошняком без комментариев).
Из бесплатных это единственный вменяемый редактор, наряду с SG Bitmap Font Editor. Уже, правда, не помню, что-то мне в нем не понравилось.
Из бесплатных это единственный вменяемый редактор, наряду с SG Bitmap Font Editor. Уже, правда, не помню, что-то мне в нем не понравилось.
А в одномерности ничего страшного нет, формат понятный.
SG Bitmap Font Editor — реально достойная программа! Старая, но очень продумана. Жаль что раньше не видел… Почерпнул много интересных идей, возможно в будущем допилю свою FastFont :)
Импорт там есть: выделяем справа с помощью Ctrl символы (или все сразу Ctrl+A) потом меню Tools->Create font…
Жаль только масштаб роликом мыши не регулируется ("+" и "-" на клавиатуре).
Понравились такие фичи:
* отображение всех символов сразу, очень наглядно;
* Ctrl + клик по Canvas для рисования — выбор символа;
* Font Test (Ctrl + T) — пишем новоиспеченным шрифтом;
* полноценное меню Edit, Undo — возвращает 10 операций;
* скриптовый язык посредством COM объектов (круто для таких целей);
* даже печать есть.
Кастомизация экспорта посредством COM — мощный инструмент, можно сделать что угодно на любом языке программирования (хотя новичкам наверное будет сложно раскуривать такую тему), на мой взгляд лучше в самой программе реализовать более навороченный экспорт, профи так или иначе сделают то что им нужно ;)
Здравствуйте. Тема возможно нестандартная для этого форума. Интересуют не стилизованные под bitmap, а именно настоящие монохромные моноширинные .bdf шрифты. Я инженер-электронщик и работать с таким древним форматом шрифтов меня заставляют производственные задачи.
Я эти шрифты использую для вывода текста на экран устройства на микроконтроллере. Весь низкоуровневый софт написан именно под .bdf, по этому нужен именно такой формат. Разработкой шрифтов и самого дизайна монохромного меню занимается отдельный человек-дизайнер. И для него мне требуется обеспечить инструментарий. Он должен иметь возможность загружать готовые bdf шрифты, создавать их с нуля, редактировать, так же писать этими шрифтами нечто на подгружаемом холсте-картинке .BMP. Когда всё готово, он должен выгрузить шрифт и передать мне в формате .bdf.
В чем сложности и что я уже попробовал:
1. Работать желательно в windows. А устанавливать в него bdf шрифты как есть невозможно. А преобразование в ttf меняет что-то в символах и при вставке в paint например такой шрифт приобретает градиент по краям буквы, что уже не делает его монохромным.
2. Как ни удивительно, программ, в которые можно напрямую подгрузить bdf шрифты и писать ими на холсте, я не нашел. Есть paintCAD, но он работает со своим типом шрифтов, которые родить из bdf через разные конвертеры у меня так и не получилось. Есть bdftopcf утилита, но она выдает набор пустых символов.
3. Пытался использовать font forge, изменять bdf шрифты получается, но при этом конвертировать их в тот же pcf для paintCAD не выходит.
В общем эта проблема может иметь много решений, я тыкался в разные, но везде возникает какой-нибудь затык. Нужно иметь возможность смотреть на шрифт на холсте, соответствующем размеру экрана дисплея в пикселях и выводить шрифт на этот холст чтобы он выглядел так же как на экране.
Надеюсь, опытные люди подскажут что юзать. Чувствую, что решение где-то рядом, но где?
Пройдут и Linux утилиты если их можно запустить через bash в win10.
_MBK_
Пикирующий бомбардировщик
Бррр не так быстро и по порядку. Я правильно понимаю - это - специфический формат растровых шрифтов для применения в контроллерах? Тогда зачем вам устанавливать их в windows где вообще работа со шрифтами идеологически другая? Тем более в векторный ttf конвертировать, что звучит чудовищно.
Что есть paintCAD? Если это то что я подумал - я оценил новогоднюю шутку, хаха?
Однозначно надо сначала как-то упростить задачу использования шрифтов, поэтому будем искать только моноширинные, т.е. у всех символов одинаковая ширина.
Для возможности дальнейшего расширения набора юникода попробуем проверить Армянский
Опять Lucida Console 10 (обычный) загружаем с 0x0530 (1328) по 0x058F ()1423 и получаем матрицу символа 8*11 !. То есть даже меньше размер получается.
Но это не беда , т.к. можно убрать галочки :
Common blank Rows at TOP of all chars и Common blank Rows at BOTTOM of all chars
И тогда на выходе получаем Lucida Console 10 (обычный) : 8*13 . Теперь можно смело армянский добавить в свой набор. А почему бы и нет?
Понятно , что иероглифы скорее всего не влезут в 8*13 , но уже полмира мы можем поддерживать.
вариант 8*13
Это например LAT Lucida Console 10 обычный ! (8*13 : 13 байт на символ)
Приходит в голову вариант сделать побольше 8*13 .
Чем он хорош : данные храним также побайтово, только теперь 1 байт = 1 ряд, и таких рядов 13шт.
Примечателен этот вариант тем , что визуально очень легко читается и создать алгоритм вывода точек на принтер еще и проще будет.
И вот момент истины :
Кириллица Lucida Console 10 обычный дает тоже 8*13 . То есть размер символа латиницы и кириллицы один и их можно объединять в один набор юникода без проблем.
моноширинные шрифты
Интернет подсказывает это :
Consolas (англ. Consolas)
Courier и Courier New
Lucida Console (англ. Lucida Console)
Terminus
Monaco (англ. Monaco)
Anonymous Pro
Есть такая программа Microelectronica GLCD Font Creator 1.2.000 (по-видимому бесплатная). Там можно загружать из системы (под Windows) ее шрифты и под разные размеры квадрата пикселей. Т.е. происходит адаптация символов под разные размеры системных шрифтов :
Lucida Console
Загружаем символы с 0x0400 (1024) по 0x4FF(1279) :
LAT Lucida Console 7 обычный :
Cyr Lucida Console 7 обычный : 5*9 (уже ближе к 5*8)
А если мы захотим добавить поддержку Армянского, Грузинского юникода , а там завитушки посложнее будут. Что делать?
Надежнее использовать Не 5*8 , а что-то по масштабнее.
Читайте также: