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

Программа представляет собой исполняемый файл (FontEdit.exe), работающий под Windows 98/XP. Настройки программы (конфигурация) сохраняются в файле FontEdit.cfg. Если файл конфигурации отсутствует, программа создаст его.

Главное окно программы показано на рис.1.

 


 1 -имя открытого файла со шрифтом.
 2 -панель инструментов с кнопками открытия/сохранения файла, импорта Windows-шрифта, увеличения/уменьшения окна просмотра/редактирования 8.
 3 -номер текущего символа (0..255).
 4 -окно для просмотра символа в натуральную величину.
 5 -ширина текущего символа.
 6 -высота текущего символа.
 7 -панель инструментов с кнопками выбора режима редактирования (стирание/рисование) и перемещения изображения влево/вправо, вверх/вниз.
 8 -окно для просмотра (и редактирования) символа в увеличенном виде.
Рис.1. Главное окно программы

 

 

Форматы шрифтов

Вы можете сохранить шрифт в одном из следующих форматов:

.fef "FontEdit format"
Внутренний формат программы. Шрифт в этом формате можно сохранять и открывать.
.bin Бинарный формат
Знакогенератор в бинарном виде. Данные сохраняются построчно, как показано на рис.2


Рис.2. Бинарный формат

В примере на рис.2 высота символа равна 16, а ширина - 13 точек. 13 точек умещаются в 2 байта, поэтому для сохранения одного символа потребуется 16 * 2 = 32 байта.
Шрифт в этом формате можно только сохранять.
.h Исходный текст на C
Данные сохраняются аналогично формату .bin, только в текстовом виде. Пример, показанный на рис.2 будет сохранен в виде последовательности символов:
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x82, 0x08, 0x82, 0x08,
0x45, 0x20, 0x45, 0x20, 0x28, 0xA0, 0x28, 0xA0, 0x28, 0xA0, 0x10, 0x40,
0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

Шрифт в этом формате можно только сохранять.
.s Исходный текст на ассемблере MPLAB ASM30.
Данные сохраняются аналогично формату .bin, только в текстовом виде. Пример, показанный на рис.2 будет сохранен в виде последовательности символов:
.pbyte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x82, 0x08, 0x82, 0x08
.pbyte 0x45, 0x20, 0x45, 0x20, 0x28, 0xA0, 0x28, 0xA0, 0x28, 0xA0, 0x10, 0x40
.pbyte 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

Шрифт в этом формате можно только сохранять.
.zbin Упакованный бинарный формат
Данный формат позволяет уменьшить размер знакогенератора за счет исключения пустых символов. Так, в стандартном знакогенераторе, состоящем из 256 символов, можно безболезненно удалить 90 символов, оставив только буквы, цифры и некоторые знаки (@, !, % и т.д.). Размер знакогенератора при этом значительно сократится, однако появляется следующая проблема: как убрать пустые символы так, чтобы кодировка оставшихся символов не изменилась? Например, код буквы 'г' равен 227. Если исключить часть символов с кодами меньшими 227, то код буквы 'г' уменьшится на величину, равную количеству исключенных символов.
Формат .zbin решает эту проблему. Вначале файла .zbin находится заголовок следующего вида:
Размер символа * 2/3 (см. подробнее)
Один символ в знакогенераторе занимает 0x21 байт
Ширина символа может быть до 16 точек (2 байта)
Символы с кодами 0xBF и более имеют смещение 0x0CE4
Символы с кодами 0xB8 и более имеют смещение 0x0C81
Символы с кодами 0xAF и более имеют смещение 0x0C60
Символы с кодами 0x21 и более имеют смещение 0x0000
Конец заголовка.

Заголовок можно описать структурой:
struct STitle
{
  BYTE bSize3;     //количество байт на один символ * 2/3 (может отсутствовать)
  BYTE bSize;      //количество байт на один символ
  BYTE bWidth;     //максимальная ширина символа в байтах
  struct SOffset   //таблица смещений символов
  {
    BYTE bChar;    //код символа
    WORD wOffset;  //смещение в таблице или смещение * 2/3
  } Offset[N];     //N - количество смещений
};
Пример реального заголовка:
0B 21 02 BF E4 0C B8 81 0C AF 60 0C AA 3F 0C A8
1E 0C 21 00 00
После заголовка следуют данные, описывающие символы (знакогенератор). В начале каждого блока данных следует байт, в котором сохранена ширина символа в точках. Например, для показанного выше символа 'W' (шириной 0x0D точек), данные будут иметь вид:
 0D 00 00 00 00 00 00 82 08 82 08 82 08 45 20 45
 20 28 A0 28 A0 28 A0 10 40 10 40 00 00 00 00 00
 00
В нашем примере из знакогенератора исключены символы с кодами:
0x01 - 0x20, 0x7F - 0xA9, 0xAB - 0xAE, 0xB0 - 0xB7, 0xBB - 0xBE
Для того, чтобы узнать смещение в знакогенераторе для конкретного символа, программа должна выполнить следующие действия:
//Вход:
//   Zn[]  - знакогенератор
//   bChar - выводимый символ
//Выход:
//   Offset - смещение в знакогенераторе
//---------------------------------------
int  i=3;          //указывает на начало таблицы смещений
BYTE size = Zn[1]; //количество байт на символ

for(;;)
{
  if(bChar >= Zn[i])
  {
    Offset = (WORD)(Zn+i+1) + (bChar-Zn[i])*size;
    return; //конец вычислений
            //данные символа находятся по адресу Zn+Offset
  }
  //берем следующее смещение
  i += 3;
}
Шрифт в этом формате можно только сохранять.
.zh Исходный текст на C (упакованный)
Данные сохраняются аналогично формату .zbin, только в текстовом виде. Шрифт в этом формате можно только сохранять.
.zs Исходный текст на ассемблере MPLAB ASM30 (упакованный).
Данные сохраняются аналогично формату .zbin, только в текстовом виде. Шрифт в этом формате можно только сохранять.

 

 

Описание меню программы и панелей инструментов

Пункт меню "Файл/Новый шрифт" служит для стирания всех символов шрифта.

 

Пункт меню "Файл/Открыть..." служит для открытия файла шрифта формата .fef.

 

Пункт меню "Файл/Сохранить" служит для сохранения файла шрифта.

Пункт меню "Файл/Сохранить как..." служит для сохранения шрифта с выбранным именем и типом файла.

 

Пункты меню "Вид/Как h-файл", "Вид/Как zh-файл", "Вид/Как s-файл", "Вид/Как zs-файл" служат для просмотра знакогенератора в текстовом формате (аналогично форматам .h, .zh, .s, .zs).

 

Пункт меню "Вид/Пример текста" показывает в отдельном окне несколько абзацев текста, напечатанного текущим шрифтом:

 


Рис.3. Просмотр текста, напечатанного текущим шрифтом
    
Рис.4. Уменьшенное окно

 

Если изменить размер окна просмотра текста, в заголовке окна отобразится размер клиентской области окна. Например, на рис.4 показано, как будет выглядеть тескт, напечатанный шрифтом Lucida9, на дисплее размером 132 на 176 точек.

Если в каталоге с программой находится файл с именем example.txt, то при выполнении пункта меню "Вид/Пример текста" будет показан текст, прочитанный из этого файла.

 

Пункт меню "Шрифт/Импорт из файла" позволяет импортировать шрифт из бинарного файла.

 

Пункт меню "Шрифт/Импорт из Windows" позволяет импортировать шрифт из Windows.

 


Рис.5. Диалог импорта шрифта

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

Программа позволяет редактировать шрифт с высотой и шириной не более 32 точек.

 

Пункт меню "Шрифт/Сдвиг..." позволяет сдвинуть изображения всех символов влево, вправо, вверх или вниз на заданное количество точек.

 

Пункт меню "Шрифт/Отразить/повернуть..." позволяет отразить все символы зеркально (по вертикали или горизонтали), а также повернуть на угол 90, 180, 270 градусов.

 

Пункт меню "Шрифт/Удалить символы" удаляет (заполняет нулями) группу символов. Вы можете редактировать группу удаляемых символов, добавляя или удаляя нужные коды символов. Коды удаляемых символов сохраняются в настройках программы автоматически.

 

Пункт меню "Шрифт/Размер символов" устанавливает одинаковые размеры для всех символов редактируемого шрифта.

Вы можете установить ширину или высоту символов в 0, тогда этот размер не будет изменен. Это удобно, когда нужно изменить, например, только высоту символов, оставив ширину без изменений.

 

Пункт меню "Шрифт/Перекодировка" позволяет перекодировать знакогенератор из кодировки Windows в DOS и обратно, а также осуществлять любую перекодировку по усмотрению пользователя. Коды перекодируемых символов вводятся в окне редактирования в таком формате:

0xBA -> 0xF3 ('є')

Здесь:

0xBA - исходный код перекодируемого символа;

0xF3 - новый код символа;

все, что находится правее второго кода символа, считается комментарием. Также можно закомментировать всю строку с помощью "//".

Учтите, что при перекодировании переписываются только те символы, для которых заданы коды в окне редактирования:

 


Рис.6. Диалог перекодирования шрифта

 

В примере на рис.6 символ 0xA9 не будет участвовать в перекодировании, так как он не задан в окне редактирования. Т.е. этот символ (если он не пустой) после перекодирования останется на своем месте.

 

 

Пункт меню "Шрифт/Параметры шрифта" позволяет посмотреть параметры шрифта (количество непустых символов, максимальную ширину и высоту символов), а также установить параметры сохранения шрифта в форматах .bin, .h, .zbin, .zh, .s, .zs.

Если установлен признак "Не сохранять пустые символы", то при сохранении шрифта в форматах .bin, .h, .s будут сохранены только непустые символы.

Если установлен признак "Не сохранять ширину символов", то при сохранении шрифта в форматах .zbin, .zh, .zs не будет сохраняться дополнительный байт, указывающий ширину конкретного символа (см. описание формата .zbin выше. В примере .zbin-формата байт, указывающий ширину символа, выделен красным цветом).

Если установлен признак "Не сохранять байт "размер * 2/3", то при сохранении шрифта в форматах .zbin, .zh, .zs не будет сохраняться байт размера * 2/3 (см. описание формата .zbin выше. Байт размера * 2/3 выделен зеленым цветом).

Если установлен признак "Сохранять смещение * 2/3", то при сохранении шрифта в форматах .zbin, .zh, .zs в поле смещения (wOffset) в таблице смещений (SOffset) будет сохранено значение смещения умноженное на 2/3 (подробности см. в примере).

Если установлен признак "Сохранять высоту вместо ширины", то при сохранении в форматах .zbin, .zh, .zs для каждого символа будет сохраняться его высота, а не ширина. Это полезно при сохранении шрифта, повернутого на 90 или 270 градусов (т.к. после поворота ширина и высота поменяются местами).

 

Горизонтальная панель инструментов (2), находящаяся вверху окна, позволяет открыть файл шрифта (только .fef), сохранить шрифт в нужном формате, импортировать шрифт из Windows, увеличить или уменьшить размер окна редактирования.

Панель инструментов (7) имеет кнопки перемещения изображения влево/вправо, вверх/вниз, а также кнопки выбора режима редактирования (ластик/карандаш).

 

 

Редактирование символа

Номер редактируемого символа (0..255) задается в поле ввода 3 (см. рис.1). При вводе можно пользоваться как клавиатурой, так и мышью (в том числе колесом прокрутки).

Ширина и высота редактируемого символа в точках задается в полях ввода 5 и 6 соответственно.

Редактирование текущего символа производится в окне 8 (см. рис.1) с помощью клавиатуры или мыши.

Если окно 8 имеет фокус ввода (фокус ввода изменяется клавишей <Tab>), курсор (синий квадрат) может перемещаться в окне редактирования с помощью клавиш <Влево>, <Вправо>, <Вверх>, <Вниз>. Точку можно засветить/погасить нажатием клавиши <Пробел>.

Если окно 8 имеет фокус ввода, с помощью колеса прокрутки можно изменять номер редактируемого символа.

Благодарности принимаются!
Вы можете использовать программу без ограничений совершенно бесплатно. Однако, как Вы понимаете, на разработку были потрачены силы и время. Вы можете отблагодарить автора, перечислив любую сумму на кошельки WebMoney:
Z312015454453, R349514193128, U323265297490
либо купив любую программу.

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

В режиме "ластик" при удержании клавиши <Ctrl> и нажатии левой кнопки мыши происходит стирание всего символа.

 

Примеры шрифтов


  

  

  

  

  

  

 

См. также:

Пример программы для PIC24