Шрифты. Разработка и использование
На этом этапе производится масштабирование контуров символа в со¬
ответствии с формулой:
Res,
Size,.., =Size , xPt.Sizex- „
bitmap contour 72 X R.GS
contour
Например, символ высотой в 1400 единиц, определенный в сетке, име¬
ющей размер в 2048 единиц, при воспроизведении размером в 10 пунктов
на устройстве с разрешением 300 точек на дюйм будет иметь высоту, рав¬
ную:
1400х10х 300 = 28.48 точек.
72 X 2048
Понятно, что дробные значения координат нельзя воспроизвести на ра¬
стровом выводном устройстве, поэтому необходимо произвести округле¬
ние. В TrueType-шрифтах округление производится не механически, а с
использованием набора инструкций, которые и определяют разметку сим¬
волов.
2. Изменение контура для улучшения качества воспроизведения сим¬
волов
Выполнение инструкций разметки приводит к тому, что контуры сим¬
волов изменяются, что приводит к улучшению их воспроизведения и к ус¬
транению ошибок округления (см. рис. 6.20).
Исходное состояние
После изменения контуров
Рис. 6.20. Улучшение контуров TrueType-шрифтов
3. Заполнение контуров
На этом этапе происходит заполнение контуров и автоматическое по¬
давление выпадения точек. Для того чтобы определить точки, которые
необходимо активизировать при заполнении, используется простое пра¬
вило: активизируются все точки, центр которых находится внутри запол¬
няемой области или точно на контуре.
Разметка в TrueType-шрифтах
В TrueType-шрифтах используется программируемая разметка симво¬
лов. Для ее описания служит специальный язык программирования, кото¬
рый мы так и будем называть — язык TrueType.
- 162 -
Глава 6. Форматы цифровых шрифтов
Программы разметки символов формируются при создании шрифта и
описывают все особенности символов для того, чтобы по возможности со¬
хранять их в любых ситуациях. В процессе исполнения программы интер¬
претатор языка TrueType получает информацию о текущем размере сим¬
волов в точках растрового устройства и о трансформациях символа
(повороте и наклоне). Операторы языка используют эти значения и изме¬
няют контур с тем, чтобы качество растрового изображения символа было
наилучшим. Чем сложнее программа разметки, тем точнее можно описать
все детали построения символа.
Разметка программируется двумя основными методами: описанием ха¬
рактеристик символа (например, заданием горизонтального расстояния
между точками, образующими прямой вертикальный штрих, которое все¬
гда должно быть одинаковым) и указанием конкретных команд, изменяю¬
щих контур.
Изменение контура происходит путем перемещения точек, образую¬
щих его. Точки могут перемещаться по отдельности или группами с ис¬
пользованием интерполяции. Отдельные команды служат для управления
растеризацией в конкретных ситуациях.
Основой программы разметки являются команды измерения расстоя¬
ния между точками и команды округления значений. Как правило, боль¬
шая часть программ разметки строится следующим образом:
1. Измеряется некоторое расстояние, которое затем округляется по оп¬
ределенным правилам.
2. Остальные расстояния (целочисленные) устанавливаются в пропор¬
ции к измеренному.
Команды языка могут использовать переменные и таблицы глобальных
значений, которые могут иметь отношение к нескольким символам.
Общее описание языка разметки
Поскольку полное описание всех команд языка разметки приводится в
официальной документации фирмы Microsoft, ограничимся лишь опреде¬
лением основных групп команд. Некоторые принципиальные методы раз¬
метки будут объяснены в следующих разделах, но без привязки к конк¬
ретным командам.
Итак, при построении программы разметки используются следующие
структуры:
• стек данных:
• команды языка;
• глобальные таблицы.
Через стек данных командами производится передача всех значений.
Команды могут брать значения со стека или класть их на стек. Стек рабо¬
тает по принципу «последний вошел — первый вышел», так что парамет¬
ры командам (если их больше одного) передаются в обратном порядке. Стек
- 163 -