1

Новые возможности редактора растровых шрифтов для ЖКИ

Характерная черта предлагаемых вниманию читателей новых версий опубликованного в [Л] редактора шрифтов — наличие в них модуля распознавания символов, который существенно облегчает и ускоряет процесс анализа и загрузки в редактор шрифтов, ранее созданных с помощью других средств. Кроме того, они предоставляют пользователю более совершенные механизмы создания и редактирования шрифтов.

Создание нового шрифта (знакогене­ратора) для ЖКИ “с нуля” — задача в принципе несложная, однако весьма кропотливая. Значительно проще “по­догнать” под свои требования шрифт, найденный в одном из доступных источ­ников, чаще всего в Интернете. Исходя из этих соображений, автор считает, что радиолюбители чаще всего используют редактор шрифта (далее — редактор) именно для корректировки “чужого” шрифта. Однако, если параметры ис­ходного шрифта неизвестны, процесс его загрузки в редактор довольно сло­жен. Желание ликвидировать эти слож­ности и послужило толчком к разработ­ке обновлённых версий редактора. Предлагаю вниманию читателей две его новые версии: базовую (CG-Edit 2.50) и одну из её модификаций (CG-Edit 2.52).

По сравнению с версией, описанной в [Л], в редакторе версии 2.50 унифици­рована процедура загрузки файла шрифта. Ранее процедуры загрузки “своих” и “чужих” (созданных в других редакторах) файлов были различными. “Свои” файлы загружались без указания параметров содержащегося в них шрифта, так как эта информация име­лась в имени файла.

Для “чужих” файлов такая операция требовала ручного ввода параметров формата, вида развёртки и типа изоб­ражения (позитивное или негативное). Конечно, если бы создатели шрифтов каким-либо образом закладывали в файл информацию о параметрах, вво­дить такие файлы в редактор было бы проще. Но, к сожалению, на практике это встречается крайне редко.

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

В новой версии редактора модуль распознавания автоматически опреде­ляет необходимые параметры шрифта, находящегося в загружаемом файле, после чего выполняются его загрузка и отображение. Принцип работы этого мо­дуля сводится к следующему. Байты из файла он поочерёдно разворачивает в матрицах, размеры которых соответст­вуют типичным форматам представления символов (от 6×8 до 24×24 пкс) на экране ЖКИ. Затем эти матрицы модуль сравнивает с матрицами-образцами, в которых развёрнуты образцовые симво­лы. При этом он перебирает все возмож­ные варианты. Результат сравнения — коэффициент корреляции (от 0 до 1) изображений, находящихся в рабочей и образцовой матрицах.

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

Кроме определения трёх абсолютно необходимых для работы редактора па­раметров шрифта (формата знакомес­та, вида развёртки и типа изображе­ния), редактор выделяет в кодовой таб­лице четыре зоны: 20Н—2FH (основные математические знаки и знаки препина­ния), 30Н—39Н (десятичные цифры), 41Н—7ЕН (буквы латиницы), С0Н—FFH (буквы кириллицы). Он даёт пользовате­лю оценку наличия распознанных сим­волов в каждой из этих зон.

Но все символы зоны модуль не ана­лизирует. Это существенно увеличило бы продолжительность его работы и объём программы-редактора. В каждой зоне он обрабатывает только первые четыре символа, применяя следующие критерии её наличия:

  • распознаны любые два символа из четырёх с коэффициентом корреля­ции не менее 0,85 каждый;
  • распознаны любые три символа из четырёх с коэффициентом корреля­ции не менее 0,7 каждый;
  • произведение коэффициентов корреляции всех четырёх символов не менее 0,179 (что соответствует средне­му коэффициенту корреляции 0,65).

Шрифт считается распознанным, если в файле найдена хотя бы одна из перечисленных выше зон.

В ходе своей работы модуль иденти­фицирует и правильно загружает непол­ные шрифты с кириллическим шриф­том. Полный шрифт отличается от непол­ного тем, что содержит столько байт, сколько требуется для описания 224 ото­бражаемых символов кодовой таблицы WIN-1251 (находящиеся в области 0—1FH управляющие символы не учитывают­ся). Например, в шрифте формата 8×8 каждый символ описывают восемь бай­тов, следовательно, размер его образа 8×224 = 1792 байта. В таком шрифте символы размещены в порядке, соот­ветствующем кодовой таблице: первый символ — всегда пробел, следующий — восклицательный знак и так далее. При этом совершенно не обязательно, что­бы все символы были правильно описа­ны. В шрифте могут быть и пустые зоны. Полный шрифт, содержащий образы всех символов кодовой таблицы, обес­печивает работу индикаторов, не имею­щих встроенного знакогенератора.

Однако далеко не всегда использо­вание полного шрифта оправдано. На­пример, некоторые контроллеры ЖКИ (например, Т6963С) имеют встроенный знакогенератор, содержащий лишь первую половину кодовой таблицы (интервал кодов символов 20Н—7ЕН) и не содержащий символов кириллицы и других алфавитов, кроме латинского. Для полноценной работы с индикатора­ми, построенными с использованием подобных контроллеров, необходимо загрузить в ОЗУ знакогенератора, если оно имеется, образы недостающих сим­волов с кодами 0С0Н—0FFH. Конечно, можно выполнить такую загрузку из полного шрифта, однако примерно три четверти его объёма не будут использо­ваны и бесполезно займут место в па­мяти устройства, иногда немалое. На­пример, объём полного шрифта с мат­рицей 16×24 пкс свыше 10 Кбайт, а дер­жать в памяти микроконтроллера лиш­ние 6…7 Кбайт — непозволительная роскошь.

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

Как известно из [Л], в ходе работы редактор формирует в ОЗУ образ шрифта, причём всегда полного, распо­ложение символов в котором соответ­ствует их порядку в кодовой таблице WIN-1251. Поскольку расположение в шрифте символов с кодами 20Н—7FH всегда одинаково, эту часть загружают в образ без каких-либо преобразований.

Точно такая же ситуация с неполным цифровым шрифтом. Однако отображе­ние чисел требует наличия в шрифте не только символов цифр 0—9 с кодами 30Н—39Н, но ещё и ряда дополнитель­ных символов (пробела, запятой, точки и так далее). Поэтому обычно цифровой шрифт содержит символы с кодами 20Н—3FH, расположенные в соответ­ствии с кодовой таблицей. Эти два вида неполных шрифтов редактор загружает в образ с его начала.

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

При анализе неполного шрифта с кириллицей модуль распознавания до­полнительно проверяет объём его об­раза. Если он больше допустимого (а это означает, что в нём находятся не только 64 символа с кодами 0СH— 0FFH, но и какая-то другая информа­ция), файл будет загружен как полный шрифт, но его первым символом станет не символ пробела, а буква А. Этим ре­дактор предоставляет пользователю возможность самому разобраться в со­держимом шрифта.

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

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

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

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

Загрузка файла шрифта в редактор

После выбора пользователем в стан­дартном диалоге Windows загружаемо­го файла редактор автоматически за­пускает процедуру распознавания па­раметров содержащегося в нём шриф­та. Если параметры шрифта не могут

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

Если редактор распознал полный или неполный без кириллицы шрифт, то на экран будет выведено сообщение с параметрами распознанного шрифта. Следует иметь в виду что слово “нет” рядом с названием группы символов не означает, что символы в этой группе вовсе отсутствуют. В общем случае это лишь свидетельство того, что редактор не смог распознать четыре первых сим­вола группы.

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

Если же редактор распознал непол­ный кириллический шрифт, то возможна его загрузка с наложением на уже нахо­дящийся в памяти компьютера образ шрифта либо загрузка с предваритель­ной очисткой текущего образа. Как от­мечалось ранее, такой шрифт редактор всегда загружает в образ, начиная с по­зиции русской буквы А (код символа 0С0Н).

Операция наложения на текущий образ позволяет создать полный шрифт из двух частей, иными словами “русифицировать” шрифт, не имевший кириллического шрифта. Для этого следует сначала загрузить в редактор шрифт, который требуется русифици­ровать, а затем загрузить неполный кириллический шрифт в режиме нало­жения.

Однако следует иметь в виду, что для правильной склейки абсолютно необхо­димо, чтобы оба шрифта (находящийся в текущем образе и загружаемый) име­ли одинаковые параметры, в противном случае получится неработоспособный продукт. Чтобы не дать пользователю совершить подобную ошибку, редактор всегда хранит параметры ранее загру­женного шрифта и при обнаружении не­полного кириллического шрифта срав­нивает с ними его параметры. Если они соответствуют друг другу, об этом выво­дится сообщение и нажатием на экран­ную кнопку “Да” может быть разрешена загрузка файла с наложением. При на­жатии на экранную кнопку “Нет” загруз­ка будет выполнена с предварительной очисткой образа шрифта, находящего­ся в памяти. Допускается также отказ от загрузки (экранной кнопкой “Отмена”).

При несовпадении форматов преду­смотрена только загрузка шрифта в

предварительно очищенный образ (“Да”) либо отказ от загрузки (“Нет”).

Главное окно редактора после за­грузки или создания шрифта показано на Figure. 1. В целом оно такое же, как в [Л], за исключением нескольких изме­нений, о которых будет рассказано далее.

Figure. 1

Figure. 1

Копирование символа из одного знакоместа в другое

Эту операцию выполняют в области выбора символа. Следует дважды щёлкнуть левой кнопкой мыши по сим­волу-источнику. Фон его знакоместа станет синим (символ Б на рис. 1). Затем щёлкнуть один раз по символу- приёмнику. Операция завершена. Си­ний фон символа-источника будет снят, а фон символа-приёмника станет крас­ным и символ будет выведен на редак­тирование. Если символ-источник выде­лен ошибочно, то для выхода из режима копирования достаточно щёлкнуть по этому символу ещё раз.

Режимы “Карандаш” и “Ластик”

Чтобы включить режим “Карандаш”, необходимо нажать и удерживать клави­шу Shift. В этом режиме элементы зна­коместа, по которым перемещают кур­сор мыши, меняют цвет на синий. Нажимать на кнопки мыши не требует­ся. После отпускания клавиши Shift редактор возвращается в обычный режим редактирования, в котором каж­дый щелчок кнопкой мыши по элементу знакоместа инвертирует состояние этого элемента.

Для включения режима “Ластик” сле­дует нажать и удерживать клавишу Ctrl. Курсор мыши станет оставлять в знако­месте белый след. Для выхода из режи­ма достаточно клавишу Ctrl отпустить.

Виды развёртки байтов

В новой версии редактора можно задать два варианта вертикальной и

два варианта горизонтальной развёртки байтов в знакомес­те. Они представлены на Figure. 2. Вертикальному режи­му из первой версии редактора соответствует режим “Вер­тикальный 1”, горизонтально­му — “Горизонтальный 1”.

Fig. 2

Fig. 2

Чтобы пользователю было легче ориентироваться при выборе нужного вида развёртки байта, изменён вид окна ввода параметров шрифта, которое открывается при создании но­вого шрифта или при ручном вводе его параметров в ходе загрузки. Теперь оно содержит графическую подсказку для выбранного вида развёртки — один из четырёх фрагментов рис. 2.

В только что открытом окне видны только экранная кнопка “Отмена” и поле выбора форма­та знакоместа. Остальные эле­менты появятся только после того, как этот выбор будет сде­лан. Нажатие на экранную кноп­ку “Изменить вид развёртки” сопровождается открытием ок­на, аналогичного описанному выше.

В открывшемся окне будет отмечен текущий вид развёртки. Его можно заменить любым допустимым (допустимые виды развёртки были рас­смотрены в [Л]). Экранная кнопка “Отмена” в окне отсутствует. Чтобы выполнить такую операцию, достаточно нажать на экранную кнопку “ОК”, не меняя вида развёртки.

Создание файлов неполных шрифтов

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

Для создания такого файла необхо­димо отметить в поле “Выходной файл” пункт “Неполный ЗГ”. В поле появятся два окна ввода с названиями “Символы: с…” и “по…”. В эти окна вводят коды первого и последнего подлежащих записи символов (согласно кодовой таблице). По умолчанию указана вся кодовая таблица — полный шрифт.

Необходимые значения можно вво­дить вручную, однако редактор позво­ляет сделать это более удобным спосо­бом, В области выбора символа щёлк­ните мышью по первому символу интер­вала (его фон станет красным), после чего дважды щёлкните мышью в окне ввода “Символы с…”. Код выделенного символа появится в этом окне.

Затем щёлкните один раз по послед­нему символу интервала и дважды в окне ввода “по…”. В нём появится код последнего символа. После этого сле­дует выбрать нужный вариант формати­рования информации в выходном фай­ле, требуемый тип изображения симво­лов (позитив или негатив) и нажать на экранную кнопку “Сохранить знакогене­ратор”.

Редактор по умолчанию строит имя сохраняемого файла так же, как было описано в [Л], с той лишь разницей, что к символу вида развёртки байта он добавляет цифру 1 или 2. Если сохра­няемый шрифт неполный, то в конце сформированного для него имени ре­дактор добавляет символы LAT для шрифта, не содержащего кириллицы, или RUS для содержащего только кириллицу. Имя получает расширение .fnt во всех случаях. Например, имя файла Font12x16v1nRUS.fnt означает, что в нём находится неполный кирилли­ческий шрифт формата 12×16, развёрт­ка байтов вертикальная 1, негативное изображение.

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

Прочие изменения

После анализа списка форматов зна­комест, с которыми работает редактор, из него удалён практически не исполь­зуемый формат 24×16 пкс. Несколько изменён облик главного окна редакто­ра. В остальном версия 2.50 редактора не имеет отличий от описанной в [Л].

Особенности редактора версии 2.52

В кодовой таблице WIN-1251 симво­лы с кодами 7FH—BFH не относятся к основным символам латиницы или ки­риллицы и используются крайне редко. Очень часто в полном шрифте эта об­ласть остаётся пустой или почти пустой.

Как было отмечено в [Л], в этой области можно размещать про­извольные символы, необходи­мые для вывода на индикатор в конкретном устройстве, для ко­торого разрабатывается шрифт. В предыдущих версиях редак­тора содержимое этой группы в поле выбора символов соот­ветствовало кодовой таблице WIN-1251 и никак не отражало её истинного состояния.

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

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

Fig. 3

Fig. 3

Однако в версии 2.52 появилась сиг­нализация о наличии символов в облас­ти 7FH—BFH, что позволяет лучше ори­ентироваться в ней. При запуске редак­тора эта область поля выбора символов пуста (Fig. 3). Flo в процессе загрузки файла шрифта редактор проверяет наличие символов в каждом её знако­месте. Считается, что символ имеется, если хотя бы один разряд любого байта его образа имеет значение 1. Если та­кое знакоместо обнаружено, то в соот­ветствующую ячейку области выбора будет выведен символ с кодом 95Н (жирная точка в центре знакоместа), как показано на Fig. 4. Это свидетельство того, что здесь присутствует некоторый символ. Увидеть и изменить его начертание можно, выбрав эту ячейку для редактирования. При создании в этой области нового символа соответствую­щая ячейка области выбора символов также будет отмечена жирной точкой.

Fig. 4

Fig. 4

Если знакоместо символа, находя­щегося в рассматриваемой области, очищено (например, в результате нажа­тия на экранную кнопку “Стереть”), то соответствующая ему ячейка области выбора символов также очищается. Это не соответствует принятому в редакто­ре принципу индикации факта редакти­рования символов. В других областях шрифта о любом редактировании сим­вола (в том числе его полном стира­нии) сигнализирует выделение этого символа в области выбора полужир­ным шрифтом увеличенного размера. Поэтому описанное выше исключение из правил нужно просто запомнить.

В остальном редактор версии 2.52 полностью аналогичен версии 2.50. В состав обновлённых редакторов обеих версий входят исполняемый файл CGE-250.exe или CGE-252.exe и папка Model, в которой размещены десять файлов: t0.mod—t5.mod и v0.bmp-v3.bmp. Эти файлы недопустимо удалять, переиме­новывать или переносить в другое место. Редактор не требует установки и может быть размещён в любом месте (в том числе на съёмных носителях). Единственное условие — папка Model должна находиться в той же папке, что и исполняемый файл.

LITERATURE

Савченко А. Редактор растровых шриф­тов для графических ЖКИ. — Радио, 2016, № 3, с. 25-27.

Download про­граммы

Author: A. SAVCHENKO, village of Zelenograd, Moscow region.
Source: Радио №10, 2016

admin

One Comment

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

Leave a Reply

Your email address will not be published. Required fields are marked *