ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.05.2024
Просмотров: 614
Скачиваний: 0
не, как это показано на Рисунок 6.17.
Рисунок 6.17 Положение точки начада координат в координатной системе TrueType-шрифтов
B принципе, жестких правил для размещения начала координат и выбора разрешающей способности описания контура нет, но есть некоторые рекомендации: размещать нулевую точку во всех символах на одном уровне по вертикали и выбирать разрешение описания крат-
ным 2, например, 2048, 4096 или 8192.
Масштабирование символов
Как и в любых контурных форматах, растеризатор TrueTypeшрифтов при воспроизведении символов должен выполнить несколько операций.
Если в разговоре о формате Type 1, в котором всю работу по качественному масштабированию и заполнению контуров символов выполняет довольно сложный растеризатор, мы ограничились только описанием процесса масштабирования, то для TrueType-шрифтов, содержащих подробные инструкции для растеризатора, мы приведем подробное описание всех этапов.
1. Масштабирование контуров
- 171 -
Рисунок 6.18 Схема процесса масштабирования для TrueType-шрифтов
Ha этом этапе производится масштабирование контуров символа в соответствии с формулой:
Sizebitmap =Sizecontour * Pt.Size * |
Resdevice |
|
72 * Rescontour |
||
|
Например, символ высотой в 1400 единиц, определенный в сетке, имеющей размер в 2048 единиц, при воспроизведении размером в 10 пунктов на устройстве с разрешением 300 точек на дюйм будет иметь высоту, равную:
1400 *10 * |
300 |
= 28.48точек |
|
72 * 2048 |
|||
|
|
Понятно, что дробные значения координат нельзя воспроизвести на растровом выводном устройстве, поэтому необходимо произвести округление. B TrueType-шрифтах округление производится не механически, а с использованием набора инструкций, которые и определяют разметку символов.
2.Изменение контура для улучшения качества воспроизведения символов
Выполнение инструкций разметки приводит к тому, что контуры символов изменяются, что приводит к улучшению их воспроизведения
ик устранению ошибок округления (Рисунок 6.19).
-172 -
Рисунок 6.19 Улучшение контуров TrueType-шрифтов
3. Заполнение контуров
Ha этом этапе происходит заполнение контуров и автоматическое подавление выпадения точек. Для того чтобы определить точки, которые необходимо активизировать при заполнении, используется простое правило: активизируются все точки, центр которых находится внутри заполняемой области или точно на контуре.
Разметка в TrueType-шрифтах
B TrueType-шрифтах используется программируемая разметка символов. Для ее описания служит специальный язык программирования, который мы так и будем называть - язык TrueType.
Программы разметки символов формируются при создании шрифта и описывают все особенности символов для того, чтобы по возможности сохранять их в любых ситуациях. B процессе исполнения программы интерпретатор языка TrueType получает информацию о текущем размере символов в точках растрового устройства и о трансформациях символа (повороте и наклоне). Операторы языка используют эти значения и изменяют контур с тем, чтобы качество растрового изображения символа было наилучшим. Чем сложнее программа разметки, тем точнее можно описать все детали построения символа.
Разметка программируется двумя основными методами: описанием характеристик символа (например, заданием горизонтального расстояния между точками, образующими прямой вертикальный штрих, которое всегда должно быть одинаковым) и указанием конкретных команд, изменяющих контур.
Изменение контура происходит путем перемещения точек, образующих его. Точки могут перемещаться по отдельности или группами с использованием интерполяции. Отдельные команды служат для управления растеризацией в конкретных ситуациях.
Основой программы разметки являются команды измерения расстояния между точками и команды округления значений. Как правило, большая часть программ разметки строится следующим образом:
- 173 -
1.Измеряется некоторое расстояние, которое затем округляется по определенным правилам.
2.Остальные расстояния (целочисленные) устанавливаются в пропорции к измеренному.
Команды языка могут использовать переменные и таблицы глобальных значений, которые могут иметь отношение к нескольким символам.
Общее описание языка разметки
Поскольку полное описание всех команд языка разметки приводится в официальной документации фирмы Microsoft, ограничимся лишь определением основных групп команд. Некоторые принципиальные методы разметки будут объяснены в следующих разделах, но без привязки к конкретным командам.
Итак, при построении программы разметки используются следующие структуры:
•стек данных;
•команды языка;
•глобальные таблицы.
Через стек данных командами производится передача всех значений. Команды могут брать значения со стека или класть их на стек. Стек работает по принципу «последний вошел - первый вышел», так что параметры командам (если их больше одного) передаются в обратном порядке. Стек может содержать значения, кратные 32 битам при 32-битной реализации TrueType-машины (Windows NT) и 16 битам при 16-битной реализации (Windows 3.1).
Данные и команды чередуются в потоке команд. Специальные команды (и только они!) могут выбирать значения из потока и переносить их на стек. Все остальные команды работают только со значениями, находящимися на стеке.
Команды языка разделяются на следующие группы:
•переносящие значения на стек;
•управляющие областью данных;
•управляющие таблицей значений;
•изменяющие текущее графическое состояние;
•управляющие контурами;
•общего назначения.
Большая часть команд используется для измерения параметров контуров и для перемещения точек, определяющих контуры. Отдельные команды применяются для управления последовательностью интерпретации программы (например, команды условных и безусловных переходов) и для управления областями данных.
Основная область, в которой хранятся все постоянные и проме- - 174 -
жуточные параметры, необходимые для разметки символов – это таблица значений, сокращенно CVT. Для доступа к полям CVT существуют специальные команды, при помощи которых можно читать значения или изменять их. С CVT связана особая программа, которая запускается всякий раз при изменении основных параметров шрифта: кегля набора или какого-либо из чисел матрицы трансформации, например угла наклона. Обычно та программа используется для модификации значений в CVT.
Другая глобальная программа, называемая шрифтовой, запускается только один раз в момент загрузки шрифта и выполняет инициализацию значений в CVT.
Для хранения промежуточных значений применяется другая таблица, которая называется областью данных (storage area). C ее помощью можно создавать переменные и небольшие массивы данных.
Последняя глобальная область - это область графического состояния (graphic state). Она содержит переменные, фиксирующие текущее состояние интерпретатора языка, например, способ округления значений или направление вектора измерения расстояний. Все переменные имеют значения по умолчанию. Для изменения этих значений обычно используется шрифтовая программа или CVT-программа.
Обозначение точек
Программа разметки, написанная на языке TrueType, связывается с контурами символов, которые описываются отдельно, при помощи указания номеров точек. Нумеруются все точки, определяющие контур (on-line и offline), как это показано на Рисунок 6.20.
Команды языка могут использовать любые точки, реально описывающие контур, и набор точек, используемых только в качестве промежуточных. Для разделения этих точек символ представляется состоящим из двух слоев: слой 1 (Z1), содержащий реальные точки, и слой 0 (Z0), состоящий из промежуточных точек. Оба слоя могут применяться во всех операциях языка.
Кроме этого, интерпретатор добавляет к описанию контура символа две дополнительные точки, определяющие поля символа
(Рисунок 6.21).
Эти точки могут использоваться наравне с другими в программе разметки и позволяют точно определять поля символа в растровых единицах.
Например, с их помощью легко можно заблокировать полное исчезновение полей. Для этого достаточно написать фрагмент программы, который бы не позволял приравнивать горизонтальные координаты дополнительных точек и крайних точек символа.
- 175 -