на главную
Карта сайта
English version
Вы читаете:

Редактор растровых шрифтов

Разное
8 лет назад

Редактор растровых шрифтов для графических ЖКИ

2

Автор предлагает компьютерную программу собственной разработки, предназначенную для создания и редактирования шрифтов для распространённых сегодня графических ЖКИ.

В последние годы радиолюбители всё чаще используют в своих разработках для отображения информации графические ЖКИ. Особенность большинства таких приборов - наличие частично или полностью загружаемого внешним управляющим устройством знакогенератора либо полное отсутствие такового. В первом случае при инициализации индикатора требуется загрузка шрифта (набора образов символов) в память знакогенератора. Чтобы вывести символ на экран, программа передаёт в контроллер ЖКИ только его код (адрес в знакогенераторе), а отображение символа на экране обеспечивает контроллер ЖКИ. Во втором случае все операции, необходимые для изображения символа на экране, выполняет программа управляющего устройства. Зачастую готовые процедуры имеются в библиотеках систем разработки программ.

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

Дело в том, что различные контроллеры ЖКИ по-разному разворачивают образ символа в матрице знакоместа. Например, контроллер KS0107 (KS0108) индикатора WG12864 разворачивает байты образа вертикально, как показано на рис. 1, а контроллер RA6963 индикатора WG240128 - горизонтально (рис. 2). В первом случае символ R должен быть описан последовательностью байтов 00H, 00H, 00H, 7FH, 09H, 19H, 29H, 49H, во втором - 1EH, 11H, 11H, 1EH, 14H, 12H, 11H, 00H. Следовательно, шрифт, подготовленный для ЖКИ с оризонтальной развёрткой байтов образов символов, будет некорректно отображён на индикаторах с вертикальной развёрткой, и наоборот.

Образ символа в матрице знакоместа

Рис. 1. Образ символа в матрице знакоместа

 

Образ символа в матрице знакоместа

Рис. 2. Образ символа в матрице знакоместа

 

С точки зрения программирования шрифт представляет собой массив констант. При разработке программ, выводящих информацию на ЖКИ, используют различные языки программирования с разными правилами описания таких массивов. Например, на языке ассемблера константы задают директивами db (define byte), а на языке BASIC - операторами Data. На языке C массив констант можно задать просто набором их значений. Представление шестнадцатеричных чисел тоже различно. В разных языках программирования используются, например, форматы 0xNN, &hNN, $NN, NNH, где NN - шестнадцатеричные цифры.

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

Такие редакторы можно найти в Интернете. Их (по крайней мере, тех, с которыми имел дело автор) основной недостаток - узконаправленность. Создаётся впечатление, что программа разработана энтузиастом для решения своей конкретной задачи. Например, одна программа создаёт выходной файл в формате, который понятен единственному компилятору языка программирования, другая создаёт образы символов, пригодные только для ЖКИ определённого типа. Поэтому создать нужный шрифт с их помощью либо вовсе не удаётся, либо выходной файл приходится корректировать, например, с помощью текстового редактора, что занимает много времени и редко обходится без ошибок. Возможности этих программ по редактированию шрифтов, созданных другими редакторами, зачастую весьма ограничены.

Предлагаемая программа CG-Edit разработанаавтором как более универсальный инструмент. Она позволяет разрабатывать новые и корректировать ранее созданные (в том числе "чужие") шрифты в наиболее употребительных в радиолюбительской практике форматах.

Допустимы следующие размеры знакомест (первый сомножитель - число пикселов по горизонтали, второй - по вертикали): 6x8, 8x8, 12x16, 16x16, 16x24, 24x16, 24x24. Можно разрабатывать и редактировать шрифты как в позитивном, так и в негативном изображении, а также изменять направление развёртки байта в знакоместе с вертикального на горизонтальное, и наоборот. Выходная информация может быть оптимизирована для использования в программах на языке ассемблера, на различных версиях языков BASIC и С.

Программа предназначена для персональных компьютеров, работающих под управлением 32- и 64-разрядных версий ОС Windows. Она состоит из единственного исполняемого файла CG-Edit.exe и не требует установки, проста в использовании, имеет интуитивно понятный пользовательский интерфейс.

После запуска программы на экране компьютера будет открыто окно, показанное на рис. 3. В его левой верхней части находится область выбора редактируемого символа в виде таблицы, в ячейках которой размещены символы кодовой страницы Windows-1251. Отображены только символы с кодами 20Н-0FFH, область управляющих кодов 0H-1FH отсутствует, поскольку они не имеют графических эквивалентов. Все основные символы латиницы, кириллицы и цифры находятся за пределами области кодов 7FH-0BFH, поэтому эту область удобно использовать для создания любых нужных для решаемой задачи символов взамен имеющихся там согласно кодовой странице Windows-1251.

Окно программы на экране компьютера

Рис. 3. Окно программы на экране компьютера

 

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

Необходимо заметить, что для знакомест не всех размеров допустимы оба направления развёртки байтов. Дело в том, что программа ориентирована на максимальную плотность упаковки информации. Ведь основные "потребители" создаваемых с её помощью шрифтов - микроконтроллерные устройства, имеющие относительно небольшой объём памяти.

На рис. 4 видно, что при горизонтальной развёртке байта в знакоместе размерами 6x8 пкс полезно используются лишь шесть разрядов, а два разряда остаются лишними. Всего образ символа занимает восемь байтов. При вертикальной развёртке (рис. 5) каждый столбец знакоместа занимает байт полностью, поэтому для образа символа требуется всего шесть байтов. Разница в два байта на каждый символ шрифта довольно существенна, поэтому во всех знакоместах, где число столбцов не кратно восьми, разрешена только вертикальная развёртка.

Горизонтальная развёртка байта в знакоместе размерами 6x8 пкс

Рис. 4. Горизонтальная развёртка байта в знакоместе размерами 6x8 пкс

 

Вертикальная развёртка байта в знакоместе размерами 6x8 пкс

Рис. 5. Вертикальная развёртка байта в знакоместе размерами 6x8 пкс

 

Выбрав параметры шрифта, нажимают на экранную кнопку "Создать". Этим закрывают окно ввода параметров, а основное окно приобретает вид, представленный на рис. 6.

Вид окна компьютерной программы

Рис. 6. Вид окна компьютерной программы

 

Программа создаёт в ОЗУ компьютера пустой образ знакогенератора. Он будет оставаться пустым до загрузки в него какого-либо шрифта из имеющегося файла нажатием на экранную кнопку "Импортировать знакогенератор" либо до создания собственных символов после нажатия на экранную кнопку "Создать знакогенератор". Символы в поле "Выбор символа" не отображают фактическое содержимое образа знакогенератора. Они всегда остаются неизменными и служат лишь для ориентировки. В области редактирования программа выводит изображение знакоместа выбранного размера.

Символ создаваемого или редактируемого знакогенератора, ячейка которого выбрана в таблице "Выбор символа" (она выделена в ней красным фоном), отображается в поле "Редактируемое знакоместо". Первоначально - это символ с кодом 20Н. Для перехода к другому символу нужно щёлкнуть по соответствующей ему ячейке таблицы левой кнопкой мыши. Надпись выше знакоместа характеризует параметры создаваемого шрифта.

Редактируют содержимое знакоместа щелчками по его пикселам левой кнопкой мыши. Каждый такой щелчок изменяет состояние пиксела на противоположное. В нижней части поля редактирования находятся четыре экранные кнопки группового управления пикселами. Нажатие на одну из них сдвигает содержимое знакоместа на пиксел вверх, вниз, влево или вправо в его пределах. Нажатие на экранную кнопку "Стереть" полностью очищает знакоместо, а нажатие на кнопку "Откат" восстанавливает исходное начертание редактируемого символа. Ввиду того что операции стирания и отката безвозвратно удаляют результаты редактирования символа, перед их выполнением программа выдаёт соответствующие предупреждающие сообщения.

Нижняя строка и правый столбец знакоместа выделены жёлтым фоном. Это напоминает, что включённые пикселы в них нежелательны, так как эти области служат разделителями соседних символов на экране ЖКИ. Однако понятие "нежелательно" не означает запрета. Включить пиксел можно, что и приходится делать, создавая такие символы, как "Д" или "Щ". При работе со знакоместами большого размера жёлтым фоном выделены две нижние строки и два крайних правых столбца, так как для хорошего восприятия больших символов целесообразно иметь между ними увеличенные промежутки.

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

Допускаются произвольный порядок выбора символов и их многократное повторное редактирование. После первого же изменения состояния любого пиксела символ в соответствующей ячейке выбора будет выделен полужирным шрифтом увеличенного размера. Это показывает, что он подвергался редактированию. Всё, что отображается в окне программы в процессе редактирования, показано на рис. 7. Видно, что символы "3" и "Щ" уже редактировались, сейчас редактируется символ "Щ", причём его "хвостик" находится в нежелательной зоне.

Окно программы в процессе редактирования

Рис. 7. Окно программы в процессе редактирования

 

При необходимости можно в любой момент изменить развёртку байтов в знакоместе с вертикальной на горизонтальную, и наоборот. Для этого следует нажать на экранную кнопку "Изменить вид развёртки". Операция действует одновременно на все символы знакогенератора. После её выполнения на экран будет выведено соответствующее сообщение и изменены параметры шрифта, выведенные над знакоместом. Изменить направление развёртки невозможно, если это приводит к увеличению объёма образа шрифта.

Несколько слов о работе с негативными шрифтами. Само понятие негативного шрифта уже стало атавизмом, так как многие современные контроллеры ЖКИ умеют инвертировать изображение самостоятельно. Тем не менее возможность создания и редактирования негативных шрифтов в программе имеется. Никаких отличий от работы с позитивным шрифтом нет. Символы в любом случае выглядят на экране компьютера позитивными. Превращение их образов в негативные происходит в процессе записи созданного шрифтана диск компьютера. Забегая вперёд, отметим, что при загрузке для редактирования файла, содержащего негативный шрифт, информация заносится в образ знакогенератора в памяти компьютера в инвертированном (позитивном) виде и инвертируется ещё раз при записи на диск.

После установки параметров шрифта в окне программы появляется ещё одна панель, озаглавленная "Выходной файл". В ней расположены управляющие элементы, позволяющие записать на диск файл знакогенератора в необходимом формате.

В выпадающем списке "Формат строки" (рис. 8) выбирают структуру строки в выходном текстовом файле. Последовательности шестнадцатеричных чисел, разделённых запятыми, может предшествовать ключевое слово "Data" или ".Db" либо оно может отсутствовать.

Выпадающий список "Формат строки"

Рис. 8. Выпадающий список "Формат строки"

 

В выпадающем списке "Формат числа" (рис. 9) выбирают способ представления шестнадцатеричного числа. К двум шестнадцатеричным цифрам NN может быть добавлен один из имеющихся в списке префиксов либо суффикс "h".

Выпадающий список "Формат числа"

Рис. 9. Выпадающий список "Формат числа"

 

Отметив пункт "Негативный шрифт", можно создать файл с таким шрифтом.

Для записи файла на диск компьютера необходимо нажать на экранную кнопку "Сохранить знакогенератор". Путь к нему указывают в стандартном диалоге Windows. По умолчанию для файла предлагается имя FontXXxYYmn.fnt, где XXxYY - формат знакоместа; m - символ "v" или "h", означающий соответственно вертикальную или горизонтальную развёртку байта; n - символ "p" или "n", обозначающий соответственно позитивное или негативное изображение символов; fnt - расширение имени.

Имя файла можно модифицировать, добавляя в начале или конце допустимые символы. Однако разрушать конструкцию "FontXXxYYmn" не рекомендуется. По ней программа распознаёт параметры "своего" шрифта при его загрузке. В противном случае программа сочтёт файл "чужим" и потребует ручного ввода параметров.

При необходимости отредактировать готовый файл знакогенератора в окне, изображённом на рис. 3, нажимают на экранную кнопку "Импортировать знакогенератор". Будет открыт стандартный диалог загрузки файлов Windows, в котором следует выбрать файл, подлежащий редактированию. Процесс загрузки этого файла различен в зависимости от его формата.

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

Если же имя файла не содержит требуемой для идентификации информации, программа предложит ввести её вручную и откроет окно, в котором необходимо указать размер знакоместа, направление развёртки байтов, позитивный или негативный шрифт находится в файле. Поэтому перед редактированием "чужого" файла следует получить представление об этих параметрах.

Если параметры указаны правильно, то "чужой" шрифт с высокой вероятностью будет загружен успешно. Алгоритм чтения содержащейся в файле информации "понимает" как десятичные, так и шестнадцатеричные числа в различных представлениях, извлекает полезную информацию из операторов Data и .Db, игнорирует комментарии. Пожалуй, единственное, что может стать препятствием для правильной загрузки - наличие в файле какой-либо дополнительной информации в незакомменти-рованном виде.

Процесс редактирования загруженного шрифта ничем не отличается от процесса создания нового. Последним этапом будет сохранение сделанной работы в файле, который станет для программы "своим".

Файл программы-редактора можно скачать здесь.

Автор: А. Савченко, пос. Зеленоградский Московской обл.


Рекомендуем к данному материалу ...

Мнения читателей
  • Виталий Геннадьевич/17.02.2021 - 21:30

    Спасибо большое! Использую WG12232.

  • Ev3658/16.11.2019 - 23:36

    Спасибо!