ЛЕКЦИЯ 8 Цвет в компьютерной графике Понятие цвета и света в компьютерной графике являются основополагающими. Свет можно рассматривать двояко либо как поток частиц различной энергии (тогда его цвет определяет энергия частиц), либо как поток электромагнитных волн (в этом случае свет определяется длиной волны). В дальнейшем цвет будем рассматривать как поток электромагнитных волн. Из курса физики известно, что белый свет (цвет солнца, лампочки) в действительности состоит из всех цветов радуги. Видимый свет состоит из спектрального распределения электромагнитной энергии с длинами волн в диапазоне 400 700 нм. Цвет излучений, длины волн которых расположены в диапазоне видимого света в определенных интервалах вокруг длины какого-либо монохроматического излучения, называются спектральными цветами. Пропуская белый свет через призму, получим видимый спектр света красный (red), оранжевый (orange), желтый (yellow), зеленый (green), голубой (blue), синий (indigo) и фиолетовый (violet). Излучения с длинами волн от 380 до 470 нм имеют фиолетовый и синий цвет, от 470 до 500 нм синезеленый, от 500 до 560 нм зеленый, от 560 до 590 нм желто-оранжевый, от 590 до 760 нм красный. Каждый кусочек этого видимого спектра имеет свое уникальное значение, которое и называется цветом. В видимом спектре содержатся миллионы различных цветов, и разница между двумя соседними практически не заметна. Излучаемый свет это свет, выходящий из активного источника (солнца, лампочки, экрана монитора). Отраженный свет это свет "отскочивший" от поверхности объекта. Именно его мы видим, когда смотрим на некоторый предмет, не излучающий своего собственного света. Излучаемый свет может содержать все цвета (белый свет), любую их комбинацию или только один цвет. Излучаемый цвет, идущий непосредственно от источника к глазу, сохраняет в себе все цвета, из которых он был создан. Некоторые волны излученного света (которые воспринимаются нами как цвета) поглощаются объектом, на который они попадают, поэтому глазом воспринимаются только не поглощенные, отраженные волны. Таким образом, некоторые предметы мы видим потому, что они излучают свет, а другие потому, что они его отражают. Белый лист бумаги выглядит белым потому, что он отражает все видимые цвета и ни один не поглощает. Если осветить его синим цветом, бумага будет выглядеть синей. Если осветить белым светом лист красной бумаги, бумага будет выглядеть красной, так как она поглощает все цвета, кроме красного. Если же осветить красную бумагу синим светом, она будет выглядеть черной, так как синий цвет она не отражает. Так как цвет может получиться как в процессе излучения, так и в процессе отражения, то в компьютерной графике существуют два противоположных метода его описания: системы аддитивных и субтрактивных цветов. Аддитивный цвет получается при соединении лучей света разных цветов. В этой системе отсутствие всех цветов дает черный цвет, а присутствие всех цветов белый. Система аддитивных цветов работает с излучаемым светом, например от монитора компьютера. В этой системе используются три основных цвета: красный, зеленый и синий (RGB). Смешивая их в разных пропорциях можно получить любой цвет. В системе субтрактивных цветов происходит обратный процесс: цвет получается, вычитая другие цвета из общего луча света. В такой системе белый цвет соответствует отсутствию всех цветов, тогда как их наличие дает черный цвет. Система субтрактивных цветов работает с отраженным светом, например от листа бумаги. В системе субтрактивных цветов основными являются голубой (Cyan), пурпурный (Magenta) и желтый цвета (Yellow) (CMY) противоположны красному, зеленому и синему. Смешивая эти цвета на белой бумаге должны получить черный цвет, однако типографские краски поглощают цвет не полностью, и поэтому изображение выглядит темно-коричневым. Чтобы исправить возникшую неточность для представления черного цвета принтеры добавляют немного черной краски. Системы цветов, основанные на таком процессе четырехцветной печати, принято обозначать аббревиатурой CMYK. 1 Самой распространенной системой цветов является система RGB. Известная задолго до появления компьютеров, она оказалась наиболее к ним приспособленной, так как монитор компьютера создает цвет излучением света, а экран его состоит из мельчайших точек красного, зеленого и синего цвета, интенсивностью свечения которых можно управлять. Однако, что хорошо для монитора не всегда хорошо при печати. Система CMYK была широко известна задолго до использования компьютеров для создания графических изображений, так как она широко применялась в цветной печати. Преобразование рисунков из системы RGB в систему CMYK сталкивается с рядом проблем. Основная сложность заключается в том, что в разных системах цвета могут меняться. Напомним, что система RGB работает с излучаемым светом, а система CMYK с отраженным; у них различна сама природа получения цветов, и то, что видим на экране монитора, никогда нельзя точно повторить на печати. Процесс преобразования усложняется еще и тем, что необходимо корректировать несовершенство типографских красок добавлением черного цвета. Существуют программы, которые позволяют работать непосредственно в цветах CMYK, а не RGB. Системы цветов RGB и CMYK базируются на ограничениях, накладываемых аппаратным обеспечением (монитором, типографскими красками). Более интуитивным способом описания цвета является представление его в виде цветового тона, насыщенности и яркости система HSB (или HSL тон, насыщенность, освещенность). Наиболее важный атрибут цвета цветовой тон ассоциируется в человеческом сознании с обусловленностью окраски предмета определенным типом пигмента, краски, красителя. Насыщенность характеризует степень, силу, уровень выражения цветового тона. Этот атрибут в человеческом сознании связан с количеством (концентрацией) пигмента, краски, красителя. Яркость (или освещенность) цвета показывает величину черного оттенка, добавленного к цвету, что делает его более темным. Система HSB больше соответствует природе цвета, но для работы на мониторах и для печати ее надо преобразовывать в другие системы RGB и CMYK, соответственно. Все описанные ранее системы (RGB, CMYK, HSB, HSL) имеют дело со всем спектром цветов: миллионами возможных оттенков. Однако большинству пользователей компьютеров часто бывает достаточно 256 или даже 16 доступных цветов. Индексированные палитры цветов это наборы цветов, из которых можно выбрать необходимый цвет. Преимуществом ограниченных палитр является то, что они занимают значительно меньше памяти, чем полные системы. Компьютер создает палитру цветов и присваивает каждому цвету номер. Затем при сохранении цвета отдельного пиксела или объекта просто запоминается номер, который имеет этот цвет в палитре. Графические языки Фактически любая графическая операция сводится к работе с отдельными пикселами поставить точку заданного цвета или узнать цвет заданной точки. Однако большинство библиотек поддерживает работу и с более сложными объектами, поскольку работа на уровне отдельно взятых пикселов была бы очень затруднительной для программиста и к тому же неэффективной. Среди подобных объектов (представляющих собой объединение пикселов) можно выделить следующие основные группы: линейные изображения (растровые образы линий); сплошные объекты (растровые образы двумерных областей); шрифты; изображения (прямоугольные матрицы пикселов). Как правило, каждый компилятор имеет свою графическую библиотеку, обеспечивающую работу с основными группами графических объектов. Графические команды имеются, например, в языках Basic, Borland C++, Pascal. Язык Lisp находит применение при программировании для систем, построенных на основе AutoCAD. Достаточно интересным является язык PostScript, предназначенный для описания страниц. 2 PostScript создавался в качестве простого стандартного языка для описания вида текста, чертежей и простых изображений на печатаемой странице, что наложило определенный отпечаток на используемые в PostScript конструкции. Язык содержит около 250 операторов, что позволяет одни и те же действия запрограммировать самыми разными способами. С другой стороны разработчики не предполагали, что программы на PostScript будут большими, поэтому средства структуризации в языке не сильно развиты. Треть языка PostScript посвящена графике, остальное - это обычный процедурный язык программирования, который включает в себя элементы из многих других языков, но наиболее близок к языку Форт. Очень важно, что описание страниц на PostScript не зависит от устройства, на котором страница будет воспроизведена. Как правило, программы на PostScript генерируются приложениями, например текстовыми процессорами, программами для настольных издательских систем, в частности CorelDrow. Одной из причин, вызвавшей появление и расцвет языка PostScript является необходимость выводить текст и изображения на растровые внешние устройства: матричные, струйные и лазерные принтеры, а также экраны мониторов. Основное свойство таких устройств заключается в том, что изображение на них строится из массива пикселов. Каждый пиксел имеет в этом массиве свой адрес номер строки и номер столбца, где он расположен, а также цвет: у обычных матричных принтеров пикселы могут быть либо черного цвета, либо белого (в этом случае их часто называют точками); у лазерных принтеров пикселы имеют до 256 градаций серого цвета, у цветных мониторов до сотен тысяч цветов. Устанавливая определенные пикселы в нужные цвета, мы получаем на экране текст и графические изображения. PostScript-устройство (принтер, монитор) это устройство, в котором имеется интерпретатор языка PostScript. Интерпретатор PostScript принимает из компьютера текстовый файл с описанием страницы и преобразует его в растровую форму, которая и выводится на печать или на экран. (С этим и связана близкая к языку Fort структура PostScript она обеспечивает наименьший размер интерпретатора). Во время преобразования описания интерпретатор выполняет различные действия, зависящие от типа устройства. Так если на черно-белое печатающее устройство выводится полутоновое изображение, то интерпретатор PostScript этого устройство выполняет разбиение полутоновых областей на зоны с определенным уровнем серого цвета и заполняет каждую зону черными точками с плотностью, зависящей от этого уровня, что создает иллюзию полутонов на результирующем изображении. Передача описания страницы по многим причинам более выгодна, чем передача сразу всего массива составляющих страницу пикселов (растрового образа страницы). Во-первых, описание во много раз компактнее даже сильно сжатого изображения. Во-вторых, процесс подготовки печатной страницы требует значительного времени: если пересылается описание, то подготовкой к печати занимается процессор принтера или дисплейный процессор, что освобождает процессор персонального компьютера (ПК) для выполнения другой работы и тем самым повышает его производительность. И, наконец, самое важное преимущество это независимость описания от типа устройства. Чтобы обеспечить независимость описания страницы от всего разнообразия внешних растровых устройств в языке PostScript введено понятие текущей страницы. Текущая страница "идеальная" страница в памяти, на которой рисует PostScript. Она не зависит от физических характеристик принтера, на который страница будет вводиться. В начале работы программы это совершенно чистая страница. Когда текущая страница полностью описана, она посылается на принтер, который распечатывает ее с таким качеством, которое способен обеспечить. Текущий путь (current path) это набор соединенных между собой отдельных точек, линий, кривых, которые вместе описывают фигуры и их положение. На текущий путь не накладывается никаких ограничений (он может пересекать сам себя и т. д.) Элементы текущего пути задаются их позициями на текущей странице. Текущий путь обрезки (Current clipping path) это границы области, в которой может быть нарисовано изображение. Система координат. Позиция элемента на странице описывается парой координат х,у. Каждое выходное устройство имеет встроенную систему координат, с помощью которой 3 адресуются точки на странице. Эту систему будем называть пространством устройства (device space). Оно отличается от устройства к устройству. Нет единообразия в расположении начала координат, а также масштабов по вертикальной и горизонтальной осям. Позиция на текущей PostScript-странице описывается в системе координат пользователя (или в пространстве пользователя), которая не зависит от пространства устройства. Координаты PostScript-программе перед печатью текущей страницы автоматически преобразуются из пространства пользователя в пространство устройства. Пространство пользователя, таким образом, представляет систему координат, внутри которой страница может быть описана независимо от конкретной машины, где эта страница будет напечатана. Пространство пользователя может быть изменено тремя способами: 1) начало его системы координат может быть перенесено в любую точку пространства пользователя; 2) оси могут быть повернуты в любом направлении; 3) масштаб по каждой оси может быть произвольно изменен, т. е. может быть задано любое линейное преобразование из пространства пользователя в пространство устройства. Набор символов Все виды скобок (круглые, квадратные, фигурные, угловые) и знак процента являются для PostScript специальными знаками. Остальные символы подмножество кода ASCII используются в программе без ограничений и называются регулярными символами. Стек. PostScript резервирует для обрабатываемых данных часть памяти, именуемую стеком. Данные, помещаемые в стек, извлекаются из него в обратном порядке, т. е. последнее записанное туда число удаляется первым. Такая дисциплина обслуживания называется LIFO. На самом деле PostScript оперирует четырьмя различными стеками: операндов, словарей, выполнения и состояния графики. Стек операндов - содержит собственно объекты PostScript и результаты действий над ними. Операторы PostScript получают операнды только через стек. Постфиксная нотация (обратная польская запись). Операции над данными в PostScript требуют, чтобы их операнды сначала были помещены в стек. Такой стиль программирования, при котором операнды задаются до операции над ними (оператора) называется постфиксной нотацией. Так запись операции сложения двух чисел, допустим 4+5, в PostScript будет выглядеть так: 4 5 add Типы данных. Как и другие распространенные языки программирования PostScript поддерживает различные типы данных, включая integer, real, boolean, массивы и строки. В нём определяются также объекты типа mark (отметка, метка) и dictionary (словарь). Элементы данных в языке PostScript называются объектами (числа, массивы, строки, символы). Над объектами можно производить различные действия, но если в других языках объекты помещаются в переменные и адресуются указанием имени переменной, то PostScript работает с данными напрямую, используя механизм стека. Например, если имеется строка -8 10.4 +77..., интерпретатор по мере ее чтения слева направо выполнит следующие действия: 1. Заносит в стек число -8; перемещает указатель на следующую свободную позицию. 2. Заносит в стек число 10.4; перемещает указатель на следующую позицию и т. д. Теперь в вершине стека число 77 и оно может быть использовано первым в какой либо операции. Остальные числа используются в порядке обратном порядку их занесения в стек. Пробелы символы табуляции и новой строки являются в PostScript-программе разделителями объектов, другие символы типа круглых и квадратных скобок в некоторых случаях также могут быть разделителями. Оператор в PostScript это слово, заставляющее интерпретатор выполнять те или иные действия. Он эквивалентен командам или процедурам в других языках программирования. Когда интерпретатор встречает слово в PostScript-программе, он просматривает свой внутренний словарь и пытается определить, является ли это слово именем оператора. Если оно в словаре найдено, то 4 выполняются все связанные с ним действия, а затем переходит к следующему слову в исходном файле. Операторы add и sub. Операторы смотрят, находятся ли в стеке их операнды. В общем случае оператор удаляет их из стека и помещает туда результат выполнения своих действий. Например, оператор add (сложение) удаляет из стека два верхних числа, складывает их и оставляет сумму в стеке. Аналогично работает оператор sub, вычитающий число, находящееся в вершине стека, из числа, лежащего в стеке следующим. Другие арифметические операторы: div деление. Второе число делится на число в вершине стека. 13 8 div ==> 1.625 idiv целочисленное деление. 25 3 idiv ==> 8 mod второе число делится на число в вершине стека, сохраняя остаток от деления. 7 12 mod ==> 5 Операнды операторов mod и idiv должны быть целыми числами. mul перемножает два числа в вершине стека, помещая вместо них их произведение. 8 9 mul ==> 72 neg изменяет знак числа, находящегося в вершине стека. -37 neg ==> 37 Запись арифметических выражений. Выражение 5+(8:2) на языке PostScript можно представить несколькими способами: 82 div 5 add либо 5 8 2 div add Чуть более сложный случай, выражение 9-(4*7), можно записать минимум двумя способами: 9 4 7 mul sub или 4 7 mul 9 exch sub Во втором способе введен новый оператор exch. Он меняет местами положение двух верхних чисел в вершине стека. Применение оператора exch вызвано тем, что sub вычитает число в вершине стека из следующего за ним, что без exch приводит к неверному порядку действий. Действия над стеком. Эта группа операторов, представителем которой был exch добавляет, удаляет и изменяет порядок следования элементов в стеке. clear а1 а2 clear очистка стека удаляет из стека все элементы 11 6 17 clear ==> count a1...an count ==> a1...an n число элементов в стеке dup a1 dup ==> a1 a1 дублирует в стеке его верхний элемент 8 dup ==> 8 8 pop a1 pop удаляет из стека его верхний элемент 31 4 pop ==> 31 roll вращает элементы стека, из стека извлекаются два числа. Верхнее говорит сколько раз и в каком направлении вращать элементы стека, второе - сколько элементов вращать. 7 8 9 3 1 roll ==> 9 7 8 7 8 9 3 - 1 roll ==> 8 9 7 copy a1...an n copy ==> a1...an a1...an дублирует n верхних элементов стека. 5 Основы графики Язык PostScript был разработан для получения графических изображений, для этого у него имеется большой набор операторов. Рисование в PostScript начинается с конструирования пути на идеальной поверхности, называемой текущей страницей. Путь набор прямых и кривых линий, определяющих область, которая будет заполнена, или траекторию, которая будет нарисована на текущей странице. Конструируя путь, необходимо решить, что с ним делать: мы можем нарисовать линию заданной толщины или заполнить его, чтобы создать непрерывное изображение. После того, как заполнение текущей страницы закончено, ее можно распечатать на физическом листе бумаги. Нарисуем вертикальную линию длиной 5". Это выполнит следующая программа: newpath 144 72 moveto 144 432 lineto stroke showpage Оператор newpath читает текущую страницу и объявляет, что начато рисование новой страницы. Конструирование пути начинается переносом воображаемого пера в заданную точку. Это перо при его переносах не оставляет "следа" на бумаге. Положение пера в каждый конкретный момент называется текущей точкой на текущем пути. Оператор moveto переносит перо в точку, координаты которой заданы его операндами. Он извлекает из стека два числа и рассматривает их как координаты х и у точки, которая становится текущей. В системе координат, принятой в PostScript по умолчанию, начало координат находится в нижнем левом углу страницы. Координата х увеличивается вправо, а у при движении вверх. Единица длины в этой системе равна 1/72 дюйма. Таким образом, оператор moveto переместит текущую точку на два дюйма вправо (144/72) и один дюйм вверх (72/72). Оператор lineto добавит сегмент к текущему пути, нарисуя линию между текущей точкой и точкой, координаты которой заданы его операндами, в данном случае 144 и 432. Точка, заданная как операнд lineto становиться текущей точкой. Обратите внимание, что lineto в действительности не рисует ничего на текущей странице. Он просто добавляет сегмент линии к текущему пути. Позже эту линию можно будет нарисовать, но это не происходит автоматически. Оператор stroke вызывает рисование сконструированного нами пути на текущей странице. Теперь этот путь становится видимой линией. И, наконец, оператор showpage печатает текущую страницу (отправляет ее на печать). Таким образом, можно выделить 3 этапа построения: 1) конструирование пути (newpath, moveto, lineto); 2) нанесение его на текущую страницу (stroke); 3) вывод текущей страницы (showpage). Как и в других языках в PostScript имеется возможность задавать перемещение не в абсолютных координатах, а в приращениях относительно текущей точки. Для этого служат операторы rmoveto и rlineto. Предыдущий пример можно записать так: newpath 144 72 rmoveto 0 360 rlineto stroke showpage Напишем программу, рисующую квадрат со стороной один дюйм, расположенный в центре страницы: 6 newpath 200 300 moveto 0 72 rlineto 0 -72 rlineto -72 0 rlineto 5 setlinewidth stroke showpage Использование приращений позволяет поместить квадрат в любое место страницы, исправив только одну строку. В этой программе новой является только предпоследняя строка. Оператор setlinewidth позволяет вам установить ширину линии. В этой строке задана ширина 5/72 дюйма. Данный оператор действует на все линии, помещаемые на текущую страницу, пока не встретится другой оператор setlinewidth. Квадрат имеет выщерблину в левом нижнем углу, так как у линий заметная толщина. Чтобы избежать этого явления, следует использовать новый оператор: closepath. Для заполнения очерченной области служит оператор fill, который "заливает" квадрат черными чернилами: newpath 200 300 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto сlosepath fill showpage Обратите внимание, что на этот раз вместо перенесения прямых на текущую страницу (stroke), вызываем оператор fill, который заполняет некоторым цветом очерченную область. Оператор fill очищает текущую траекторию и после него не определена текущая точка. Уровень серого цвета для заполнения фигуры задается аргументом оператора setgray числом в интервале от 0 (черный цвет) до 1(белый). newpath 200 300 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto .6 setgray fill showpage Заданный уровень серого действует до появления следующего оператора setgray. Если setgray не задан, то по умолчанию область заполняется черным цветом. Так как у каждого типа принтера свой способ построения полутонов, то полутона одной и той же PostScript-страницы, выведенной на разных принтерах могут не совпадать. При рисовании перекрывающихся областей цвет их пересечения определяется цветом, нанесенным на текущую страницу последним. В языке поддерживаются две цветовые модели: HSB (тон-насыщенность-яркость) и RGB (красный-зеленый-голубой). В каждой из этих моделей можно задать любой цвет с помощью трёх числовых параметров. В более простой модели RGB цвет задаётся сочетанием интенсивности трёх основных цветов: красного, зеленого и голубого. Интенсивность цвета задаётся числом в диапазоне от 0 до 1, причём 0 означает полное отсутствие данного цвета, а 1 - его максимальную интенсивность. Если для всех трёх цветов заданы равные интенсивности, то в результате 7 получится чистый серый цвет с градацией по всей шкале от белого (0, 0, 0) до черного (1, 1, 1). Напомню, что уровень серого цвета обычно устанавливается оператором setgray. В HSB тон задаёт собственно цвет. Он определяется его расположением на цветовом круге: 0 -чистый красный, 120 -- зелёный, 240 -- синий. Остальные цвета получаются из смешения двух соседних. (Так, 60 -- жёлтый, , 180 -- голубой, 300 -- фиолетовый.) Насыщенность - густота цвета заданного тона: 0 соответствует отсутствию цвета, а 1 - максимальной его насыщенности. Яркость - общая интенсивность цвета (содержание белого цвета в данном цвете): 0 соответствует чёрному цвету, а 1 - белому (максимальной интенсивности). Цвет может быть задан с помощью соответствующих модели операторов setrgbcolor и sethsbcolor. Работа со шрифтами Язык PostScript не был бы так популярен, если бы он не предоставлял богатейшие возможности вывода на печать текстов. Текстовые данные представлены в PostScript объектами типа string (строка). Строка может содержать любую последовательность символов, заключенную в круглые скобки. Строка может быть помещена в стек, присвоена переменной или напечатана. Однако перед тем как строка будет помещена на текущей странице интерпретатору PostScript необходимо указать, какую гарнитуру и размер шрифта использовать при печати. Шрифт это набор символов, имеющих единый дизайн. Дизайн конкретного шрифта называется гарнитурой. Набор гарнитур, разработанных для совместного использования, называется семейством гарнитур. Наиболее популярные гарнитуры: Таймс, Курьер, Журнальная и др. Конкретный PostScript-шрифт является реализацией начертания некоторого семейства гарнитур. PostScript-шрифты относятся к классу векторных и, следовательно, масштабируемых шрифтов. Существующие методы описания векторных шрифтов позволяют автоматически менять размер шрифта (кегель) с минимальными искажениями его начертания при преобразовании размера. Чтобы задать шрифт, нужно выполнить следующие действия: найти описание шрифта в словаре шрифтов. Это описание позволяет построить контуры каждого отдельного символа; отмасштабировать шрифт до нужного размера. Его размер задается минимальным расстоянием по вертикали между строками текста, необходимым, чтобы эти строки не накладывались одна на другую, например обычный шрифт часто задается высотой в 12 пунктов (напомним, что 1 пункт = 1/72 дюйма); установить отмасштабированный шрифт в качестве текущего шрифта, которым и будет печататься текст. Чтобы посмотреть, как это работает, давайте напечатаем слова PC Week шрифтом Helvetica размером 14 пунктов. /Helvetica findfont 14 scalefont setfont 100 150 moveto (PC Week) show showpage В этом фрагменте используется ряд новых операторов. В первой строке в стек сначала помещается литерал с именем шрифта, а затем вызывается оператор findfont. Этот оператор ищет это имя в словаре с названием FontDictionary и помещает соответствующий словарь шрифта в стек. Данный словарь содержит описания образов символов для шрифта размером в один пункт. Нужный размер устанавливается с помощью оператора scalefont, который берет из стека число и словарь шрифта и возвращает в стек словарь шрифта модифицированный под нужный размер. 8 Оператор setfont переводит словарь шрифта из стека в текущий шрифт, который и будет использован для печати текста. В PostScript не существует различия между графикой и текстом. Символ текста рассматривается как один из графических объектов, размещаемых на текущей странице. Поэтому для совмещения на ней текста и графики не требуется никаких специальных действий. Программу на PostScript можно встроить в документ Word. Дело в том, что Word имеет собственный формат файлов, а программа на PostScript - это обычный ASCII-текст. Для этой цели используется поле print. Напомним, что полями в Word называются специальные команды редактора, заключённые в фигурные скобки. Поле print предназначено для того, чтобы выводить символы непосредственно на принтер (например, команды прямого управления принтером, команды на языке PCL и, конечно, PostSript-программы). Формат поля: {print \ p Size "текст"} Ключ \p указывает, что в поле текст будет записана PostSript-программа. Операторы PostScript, заданные в этом поле, могут работать только в окне рисования, определённом атрибутом Size, значения которого приведены в таблице. Таблица 8.1. Возможные значения атрибута Size Аргумент page para pic row cell Значение Рисунок на всей текущей странице (по умолчанию) В пределах абзаца (высотой не менее дюйма), содержащего поле print Рисунок располагается после поля print и до конца абзаца, содержащего это поле Рисунок в текущей строке таблицы Рисунок в текущем элементе таблицы Рассмотренные выше операторы составляют лишь незначительную долю от имеющихся в PostScript, однако они наглядно демонстрируют возможности этого языка, в частности при построении графических изображений совместно с текстом. 9