Получаем растровые шрифты для знакогенераторов

Иногда в практике программирования приходится создавать собственный знакогенератор. И если написание кода не представляет никакого труда, то вопрос о том, где взять данные, описывающие изображения символов, может поставить в затруднение. С помощью предлагаемых программ можно получить кодовое представление не только шрифтов, но и любых черно-белых изображений.

Если ни один из найденных в интернете файлов, описывающих изображения символов, вам не подходит, то можно попробовать «выдрать» шрифты из самой Windows, попутно подправив их на свой вкус и манер. Для этого надо вывести на экран изображение всех отранжированных по коду символов, сделать «слепок с экрана», отредактировать его в каком-либо графическом редакторе (с целью отсечения лишней графики), а затем преобразовать получившуюся картинку в код.

Для отрисовки символов подойдет любая программа, выводящая текст на экран (от Блокнота до Фотошопа), но больше всего мне нравится файловый менеджер FAR – этому есть несколько причин. Во-первых, FAR (как осколок времен DOS), «заточен» под «моноширинный» текст, т.е. все выводимые символы будут иметь одинаковую ширину. Во-вторых, при задании шрифтов (в свойствах окна MS-DOS, в котором выполняется программа) будут отображаться высота и ширина символа, а это позволит (см. рисунок) подогнать размер под требуемый формат. Промежуточные размеры шрифта задаются их непосредственным вводом в соответсвующее поле. Ну и в-третьих, менеджер Far позволяет использовать как Windows-овскую, так и DOS-овскую кодировку русских символов (переключается клавишей F8, следите только за правильным положением этого переключателя!).

Итак, отобразив на экране текст (например – из прилагаемого файла Font.txt, в котором символы, начиная с 32 – "пробела", расположены по возрастанию кода), делаем «снимок экрана» кнопкой PrtSc (либо сочетанием клавиш Alt + PrtSc), а в графическом редакторе этот снимок вставляем кнопками Ctrl + V (либо командой «Вставить»). Здесь может возникнуть такая проблема – невозможно вывести на экран всю строку целиком (размеры не позволяют). Это приводит к необходимости разбивать ее на части, с последующей склейкой кусочков изображений.

Предлагаемые программы-конвертеры работают с графическим форматом bmp, производя его построчное сканирование (слева направо) и кодируя образовавшиеся цепочки данных в соответствии с требованиями компилляторов. На выходе получается обычный текстовый файл, который можно подключить к проекту. Требование к картинке – она должна иметь две градации яркости (черное и белое) и быть шириной, кратной 8.

Программы писались для себя, под требования текущего момента, а следовательно не ищите в них справок по работе и прочих изысков (возможно, в будущем дойдут руки и до написания единой универсальной программы). Напоминаю также о необходимости проверки всего скачанного из интернета на предмет наличия вирусов и шпионских модулей, а также о принципе «берите как есть – все на ваш страх и риск».

Пикселы не тасуются и переводятся так, как они идут скопом в исходном файле (построчно слева направо). Поэтому если картинка представляет собой горизонтальный ряд символов, то сначала идут первые строки всех символов, затем – вторые, и т.д. Такой порядок оптимален для реализации большинства знакогенераторов (догадайтесь почему!), но ничто не мешает расположить символы столбцом и получить иное чередование – сначала идут все строки первого символа, затем – второго и т.д.). Ниже приведен пример графического файла, который можно «скормить» программе.

Включать ли в набор область служебных символов (с кодами 0...31) – решать вам. В некоторых случаях (например, при работе с графическими LCD) изображение нужно выводить не строками, а столбцами. Я надеюсь, вы уже догадались, что в этом случае необходимо развернуть картинку на 90 град и, возможно, ее зеркально отобразить.


Пример шрифта (размер символов 8 х 10 точек)

Программы в архивах:

Convert3_psoc_8.rar (119 кБ) - для символов шириной 8 (а также 16, 24 и т.д.) точек.
Результат работы – строки «DB» в двоичном 8-битовом формате, пригодные для непосредственной вставки в ассемблерный текст.
Порядок бит – «LSB first» (младший значащий бит идет первым, т.е. бит 0 в байте соответствует самому левому пикселю).
Ширина исходной картинки в пикселах должна быть кратна ширине символа.

Convert3_arm_8.rar (117 кБ) - для символов шириной 8 точек.
Результат – байты в HEX-формате, пригодные для вставки в текст на «Си».
Порядок бит – «MSB first» (бит 7 в байте соответствует самому левому пикселю).
Ширина исходной картинки должна быть кратна 8.

Convert3_arm_16.rar (114 кБ) – для символов шириной 16 точек.
То же, что и Convert3_arm_8.rar, но константы не 8-, а 16-битные (бит 15 соответствует самому левому пикселю).
Ширина исходной картинки должна быть кратна 16.

Замечания:

1. Файлы в архивах:
Convert.exe – сама программа.
Font.txt – все символы, расположенные по возрастанию кода (начиная с 32 – пробела, и заканчивая 255), для показа их на экране. Если не помещаются, разбивайте на несколько строк, с последующим «склеиванием» фрагментов.
*.bmp – пример входного файла.
*.txt – результат работы.

2. Менеджер Far должен быть запущен в оконном (не полноэкранном!) режиме.

3. Если у символов получаются «рваные» края, то это означает, что во Windows включен «режим сглаживания экранных шрифтов». На время захвата картинок его нобходимо отключить, как это показано на картинке ниже:


Свойства экрана -> Оформление -> Эффекты


antiradio.narod.ru
Дата создания документа: 26.01.2009. Последнее обновление: 01.10.2013.