Шрифты. Разработка и использование

На этом этапе производится масштабирование контуров символа в со¬
ответствии с формулой:

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 -