Пути

Путь определяет одну или более форм или подпути. Подпуть может состоять из прямых линий, кривых или обоих. Это может быть открыто или закрыто. Подпуть может быть простой формой, такой как строка, круг, прямоугольник, или звезда или более сложная форма, такая как контур горной цепи или абстрактного болвана. Рисунок 3-1 показывает некоторые пути, которые можно создать. Прямая линия (в верхнем левом из числа) подчеркивается штриховой линией; строки могут также быть существенными. Волнистый путь (в средней вершине) составлен из нескольких кривых и является открытым контуром. Концентрические круги заполнены, но не перечеркиваемые. Калифорния является замкнутым путем, составленным из многих кривых и строк, и путь и перечеркивается и заполняется. Звезды иллюстрируют две опции для заполнения путей, о которых Вы будете читать далее в этой главе.

  Кварц рисунка 3-1 поддерживает находящееся на пути получение
Quartz supports path-based drawing

В этой главе Вы узнаете о стандартных блоках, составляющих пути, как перечеркнуть и нарисовать пути и параметры, влияющие на появление путей.

Создание тракта и рисование пути

Создание тракта и рисование пути являются отдельными задачами. Сначала Вы создаете путь. Когда Вы хотите представить путь, Вы запрашиваете Кварц нарисовать его. Как Вы видите на рисунке 3-1, можно принять решение перечеркнуть путь, заполнить путь или оба штриха и заполнить путь. Можно также использовать путь для ограничения получения других объектов в границах создания пути, в действительности, области отсечения.

Рисунок 3-2 показывает путь, нарисованный, и это содержит два подпути. Подпуть слева является прямоугольником, и подпуть справа является абстрактной формой, составленной из прямых линий и кривых. Каждый подпуть заполнен и его перечеркиваемая схема.

Рисунок 3-2  путь, содержащий две формы или подпути
A path that contains two shapes, or subpaths

Рисунок 3-3 показывает разнообразные пути, нарисованные независимо. Каждый путь содержит случайным образом сгенерированную кривую, некоторые из которых заполнены и другие перечеркнули. Получение ограничивается к круговой области областью отсечения.

Рисунок 3-3  область отсечения ограничивает получение
A clipping area constrains drawing

Стандартные блоки

Подпути создаются из строк, дуг и кривых. Кварц также обеспечивает функции удобства для добавления прямоугольников и замещающих знаков с единственным вызовом функции. Точки являются также существенными стандартными блоками путей, потому что точки определяют запуск и конечные расположения форм.

Точки

Точки являются координатами x и y, указывающими расположение в пространстве пользователя. Можно вызвать функцию CGContextMoveToPoint указать стартовую позицию для нового подпути. Кварц отслеживает текущую точку, которая является последним расположением, используемым для конструкции пути. Например, если Вы вызываете функцию CGContextMoveToPoint установить расположение в (10,10), который перемещает текущую точку к (10,10). Если Вы тогда проводите горизонтальную линию 50 модулей долго, последняя точка на строке, т.е. (60,10), становится текущей точкой. Строки, дуги и кривые всегда рисуются, запускаясь с текущей точки.

Большую часть времени Вы указываете точку путем передачи Кварцевым функциям двух значений с плавающей точкой для указания координат x и y. Некоторые функции требуют, чтобы Вы передали a CGPoint структура данных, содержащая два значения с плавающей точкой.

Строки

Строка определяется ее конечными точками. Его начальная точка, как всегда предполагается, является текущей точкой, поэтому при создании строки Вы указываете только ее конечную точку. Вы используете функцию CGContextAddLineToPoint добавлять одну строку к подпути.

Можно добавить серию связанных строк к пути путем вызывания функции CGContextAddLines. Вы передаете эту функцию массив точек. Первая точка должна быть начальной точкой первой строки; остающиеся точки являются конечными точками. Кварц начинает новый подпуть в первой точке и подключает сегмент прямой линии к каждой конечной точке.

Дуги

Дуги являются круговыми сегментами. Кварц обеспечивает две функции, создающие дуги. Функция CGContextAddArc создает изогнутый сегмент из круга. Вы указываете центр круга, радиуса и радиального угла (в радианах). Можно создать полный круг путем указания радиального угла 2 пи. Рисунок 3-4 показывает разнообразные пути, нарисованные независимо. Каждый путь содержит случайным образом сгенерированный круг; некоторые переполнены, и другие перечеркиваются.

  Разнообразные пути рисунка 3-4; каждый путь содержит случайным образом сгенерированный круг
Multiple paths; each path contains a randomly generated circle

Функция CGContextAddArcToPoint когда Вы хотите к раунду углы прямоугольника, идеально для использования. Кварц использует конечные точки, которые Вы предоставляете для создания двух строк касательной. Вы также предоставляете радиус круга, от которого Кварц отрезает дугу. Центральная точка дуги является пересечением двух радиусов, каждый из которых перпендикулярен одной из двух строк касательной. Каждая конечная точка дуги является точкой касательной на одной из строк касательной, как показано на рисунке 3-5. Красная часть круга - то, что фактически нарисовано.

Рисунок 3-5  , Определяющий дугу с помощью двух строк касательной и радиуса
Defining an arc with two tangent lines and a radius

Если текущий путь уже содержит подпуть, Кварц добавляет сегмент прямой линии от текущей точки до начальной точки дуги. Если текущий путь пуст, Кварц создает новый подпуть в начальной точке для дуги и не добавляет начальный сегмент прямой линии.

Кривые

Квадратичные и кубические кривые Bézier являются алгебраическими кривыми, которые могут указать любое число интересных криволинейных форм. Точки на этих кривых вычисляются путем применения полиномиальной формулы к начальным и конечным точкам и одной или более контрольных точек. Формы, определенные таким образом, являются основанием для векторной графики. Формула намного более компактна для хранения, чем массив битов и имеет преимущество, что кривая может быть воссоздана в любом разрешении.

Рисунок 3-6 показывает множество кривых, создаваемых путем рисования разнообразных путей независимо. Каждый путь содержит случайным образом сгенерированную кривую; некоторые переполнены, и другие перечеркиваются.

  Разнообразные пути рисунка 3-6; каждый путь содержит случайным образом сгенерированную кривую
Multiple paths; each path contains a randomly generated curve

Полиномиальные формулы, дающие повышению к квадратичным и кубическим кривым Bézier и подробным данным о том, как генерировать кривые от формул, обсуждены во многих текстах математики и онлайновых источниках, описывающих компьютерную графику. Эти подробные данные не обсуждены здесь.

Вы используете функцию CGContextAddCurveToPoint для добавления кубической кривой Bézier от текущей точки с помощью контрольных точек и конечной точки, Вы указываете. Рисунок 3-7 показывает кубическую кривую Bézier, следующую из текущей точки, контрольных точек и конечной точки, показанной в числе. Размещение этих двух контрольных точек определяет геометрию кривой. Если контрольные точки и выше начальных и конечных точек, дуги кривой вверх. Если контрольные точки и ниже начальных и конечных точек, дуги кривой вниз. Если вторая контрольная точка ближе к текущей точке (начальная точка), чем первая контрольная точка, кривая пересекает себя, создавая цикл.

Рисунок 3-7  кубическая кривая Bézier использует две контрольных точки
A cubic Bézier curve uses two control points

Можно добавить квадратичную кривую Bézier от текущей точки путем вызывания функции CGContextAddQuadCurveToPoint, и указывая контрольную точку и конечную точку. Рисунок 3-8 показывает две кривые, следующие из использования тех же конечных точек, но различных контрольных точек. Контрольная точка определяет направление что дуги кривой. Не возможно создать столько интересных форм с квадратичной кривой Bézier, сколько Вы можете с кубическим, потому что квадратичные кривые используют только одну контрольную точку. Например, не возможно создать перекрестное соединение с помощью единственной контрольной точки.

Рисунок 3-8  квадратичная кривая Bézier использует одну контрольную точку
A quadratic Bézier curve uses one control point

Закрытие подпути

Для закрытия текущего подпути приложение должно вызвать CGContextClosePath. Эта функция добавляет линейный сегмент от текущей точки до начальной точки подпути и закрывает подпуть. Строки, дуги и кривые, заканчивающиеся в начальной точке подпути, фактически не закрывают подпуть. Необходимо явно вызвать CGContextClosePath закрыть подпуть.

Некоторые Кварцевые функции обрабатывают подпути пути, как будто они были закрыты Вашим приложением. Те команды обрабатывают каждый подпуть, как будто Ваше приложение вызвало CGContextClosePath закрыть его, неявно добавляя линейный сегмент к начальной точке подпути.

После закрытия подпути, если Ваше приложение выполняет дополнительные вызовы для добавления строк, дуг или кривых к пути, Кварц начинает новый подпуть, запускающийся в начальной точке подпути, который Вы просто закрыли.

Замещающие знаки

Эллипс является по существу раздавленным кругом. Вы создаете один путем определения двух фокусов и затем графического изображения всех точек, лежащих на расстоянии, таким образом, что добавление расстояния от любой точки на эллипсе к одному фокусу к расстоянию от той же самой точки до другого фокуса всегда является тем же значением. Рисунок 3-9 показывает разнообразные пути, нарисованные независимо. Каждый путь содержит случайным образом сгенерированный эллипс; некоторые переполнены, и другие перечеркиваются.

  Разнообразные пути рисунка 3-9; каждый путь содержит случайным образом сгенерированный эллипс
Multiple paths; each path contains a randomly generated ellipse

Можно добавить эллипс к текущему пути путем вызывания функции CGContextAddEllipseInRect. Вы предоставляете прямоугольник, определяющий границы эллипса. Кварц приближает эллипс с помощью последовательности кривых Bézier. Центр эллипса является центром прямоугольника. Если ширина и высота прямоугольника равны (т.е. квадрат), эллипс является проспектом с радиусом, равным половине ширины (или высота) прямоугольника. Если ширина и высота прямоугольника неравны, они определяют главные и незначительные оси эллипса.

Эллипс, добавляющийся к пути, запускается с перемещения - к работе и заканчивается работой подпути завершения всеми перемещениями, ориентированными в направлении по часовой стрелке.

Прямоугольники

Можно добавить прямоугольник к текущему пути путем вызывания функции CGContextAddRect. Вы предоставляете a CGRect структура, содержащая источник прямоугольника и его ширины и высоты.

Прямоугольник, добавляющийся к пути, запускается с перемещения - к работе и заканчивается работой подпути завершения всеми перемещениями, ориентированными в направлении против часовой стрелки.

Можно добавить много прямоугольников к текущему пути путем вызывания функции CGContextAddRects и предоставление массива CGRect структуры. Рисунок 3-10 показывает разнообразные пути, нарисованные независимо. Каждый путь содержит случайным образом сгенерированный прямоугольник; некоторые переполнены, и другие перечеркиваются.

  Разнообразные пути рисунка 3-10; каждый путь содержит случайным образом сгенерированный прямоугольник
Multiple paths; each path contains a randomly generated rectangle

Создание пути

Когда Вы хотите создать путь в графическом контексте, Вы сигнализируете Кварц путем вызывания функции CGContextBeginPath . Затем, Вы устанавливаете начальную точку для первой формы или подпуть, по пути путем вызывания функции CGContextMoveToPoint. После установления первой точки можно добавить строки, дуги и кривые к пути, имея в виду следующее:

После рисования пути он сбрасывается от графического контекста. Вы не могли бы хотеть терять свой путь так легко, особенно если он изображает сложную сцену, Вы хотите использовать много раз. По этой причине Кварц обеспечивает два типа данных для создания допускающих повторное использование путей —CGPathRef и CGMutablePathRef. Можно вызвать функцию CGPathCreateMutable для создания непостоянного CGPath возражают, к которому можно добавить строки, дуги, кривые и прямоугольники. Кварц обеспечивает ряд функций CGPath, которые параллельны функциям, обсужденным в Стандартных блоках. Функции пути воздействуют на объект CGPath вместо графического контекста. Эти функции:

Посмотрите Кварц 2D Ссылочный Набор для полного списка функций пути.

Когда Вы хотите добавить путь к графическому контексту, Вы вызываете функцию CGContextAddPath. Путь остается в графическом контексте, пока Кварц не красит его. Можно добавить путь снова путем вызова CGContextAddPath.

Рисование пути

Можно нарисовать текущий путь путем перечеркивания или заполнения или обоих. Перечеркивание красит строку, одновременно покупающую и продающую путь. Заполнение красит область содержавшей в пути. Кварц имеет функции, позволяющие Вам перечеркнуть путь, заполнить путь или оба штриха и заполнить путь. Характеристики перечеркиваемой строки (ширина, цвет, и т.д), цвет заливки и Кварцевое использование метода для вычисления закрашенной области являются всей частью состояния графики (см. Состояния графики).

Параметры то перечеркивание влияния

Можно влиять, как путь перечеркивается путем изменения параметров, перечисленных в Таблице 3-1. Эти параметры являются частью состояния графики, что означает, что значение, которое Вы устанавливаете для параметра, влияет на все последующее перечеркивание, пока Вы не устанавливаете параметр на другое значение.

Табличные 3-1  Параметры, влияющие, как Кварц перечеркивает текущий путь

Параметр

Функция для установки значения параметра

Ширина строки

CGContextSetLineWidth

Соединение строки

CGContextSetLineJoin

Окончание линии

CGContextSetLineCap

Предельный угол стыка

CGContextSetMiterLimit

Пунктирный узор строки

CGContextSetLineDash

Пространство цвета обводки

CGContextSetStrokeColorSpace

Цвет обводки

CGContextSetStrokeColorCGContextSetStrokeColorWithColor

Штриховой образец

CGContextSetStrokePattern

Ширина строки является общей шириной строки, выраженной в модулях пространства пользователя. Строка одновременно покупает и продает путь с половиной общей ширины с обеих сторон.

Соединение строки указывает, как Кварц рисует соединение между связанными линейными сегментами. Кварц поддерживает стили соединения строки, описанные в Таблице 3-2. Стиль по умолчанию является соединением среза.

Табличные 3-2  стили соединения Строки

Стиль

Появление

Описание

Соединение среза

Miter join

Кварц расширяет внешние края штрихов для этих двух сегментов, пока они не встречаются под углом, как в кадре рисунка. Если сегменты встречаются под слишком резким углом, косоугольное соединение используется вместо этого. Если длина среза, разделенного на ширину строки, больше, чем предельный угол стыка, сегмент слишком резок.

Круглое соединение

Round join

Кварц рисует полукруглую дугу с диаметром, равным ширине строки вокруг конечной точки. Вложенная область заполнена в.

Косоугольное соединение

Bevel join

Кварц заканчивает эти два сегмента с прописными буквами торца. Получающаяся метка вне концов сегментов заполнена треугольником.

Окончание линии указывает метод, используемый CGContextStrokePath нарисовать конечную точку строки. Кварц поддерживает стили окончания линии, описанные в Таблице 3-3. Стиль по умолчанию является прописной буквой торца.

Табличные 3-3  стили Окончания линии

Стиль

Появление

Описание

Прописная буква торца

Butt cap

Кварц смело встречает штрих в конечной точке пути. Нет никакой проекции вне конца пути.

Круглая прописная буква

Round cap

Кварц рисует круг с диаметром, равным ширине строки вокруг точки, где эти два сегмента встречаются, производя скругленный угол. Вложенная область заполнена в.

Проектирование квадратного конца

Projecting square cap

Кварц расширяет штрих вне конечной точки пути для расстояния, равного половине ширины строки. Расширение смело встречено.

Закрытый подпуть обрабатывает начальную точку как соединение между связанными линейными сегментами; начальная точка представляется с помощью выбранного метода соединения строки. Напротив, если Вы закрываете путь путем добавления линейного сегмента, соединяющегося с начальной точкой, оба конца пути нарисованы с помощью выбранного метода окончания линии.

Пунктирный узор строки позволяет Вам проводить сегментированную линию вдоль перечеркиваемого пути. Вы управляете размером и размещением сегментов тире вдоль строки путем указания массива тире и фазы тире как параметры к CGContextSetLineDash:

void CGContextSetLineDash (
    CGContextRef ctx,
    CGFloat phase,
    const CGFloat lengths[],
    size_t count
);

Элементы lengths параметр указывает ширины тире, чередующихся между нарисованными и непокрашенными сегментами строки. phase параметр указывает начальную точку пунктирного узора. Рисунок 3-11 показывает некоторые пунктирные узоры строки.

  Примеры рисунка 3-11 пунктирных узоров строки
Examples of line dash patterns

Пространство цвета обводки определяет, как значения цвета обводки интерпретируются Кварцем. Можно также указать Кварцевый цвет (CGColorRef тип данных), который инкапсулирует и цветовое и цветовое пространство. Для получения дополнительной информации об установке цветового пространства и цвета, посмотрите Цветовые и Цветовые пространства.

Функции для перечеркивания пути

Кварц обеспечивает функции, показанные в Таблице 3-4 для перечеркивания текущего пути. Некоторые - функции удобства для перечеркивания прямоугольников или замещающих знаков.

Табличные 3-4  Функции это контуры штриха

Функция

Описание

CGContextStrokePath

Перечеркивает текущий путь.

CGContextStrokeRect

Перечеркивает указанный прямоугольник.

CGContextStrokeRectWithWidth

Перечеркивает указанный прямоугольник, с помощью указанной ширины строки.

CGContextStrokeEllipseInRect

Перечеркивает эллипс, соответствующий в указанном прямоугольнике.

CGContextStrokeLineSegments

Перечеркивает последовательность строк.

CGContextDrawPath

Если Вы передаете константу kCGPathStroke, перечеркивает текущий путь. Посмотрите Заполнение Пути, если Вы хотите и заполнить и перечеркнуть путь.

Функция CGContextStrokeLineSegments эквивалентно следующему коду:

CGContextBeginPath (context);
for (k = 0; k < count; k += 2) {
    CGContextMoveToPoint(context, s[k].x, s[k].y);
    CGContextAddLineToPoint(context, s[k+1].x, s[k+1].y);
}
CGContextStrokePath(context);

Когда Вы вызываете CGContextStrokeLineSegments, Вы указываете линейные сегменты как массив точек, организованных как пары. Каждая пара состоит из начальной точки линейного сегмента, сопровождаемого конечной точкой линейного сегмента. Например, первая точка в массиве указывает стартовую позицию первой строки, вторая точка указывает конечную позицию первой строки, третья точка указывает стартовую позицию второй строки и т.д.

Заполнение пути

При заполнении текущего пути Кварцевые действия, как будто был закрыт каждый подпуть, содержавшийся в пути. Это тогда использует эти закрытые подпути и вычисляет пиксели для заполнения. Существует два способа, которыми Кварц может вычислить закрашенную область. Простые контуры, такие как овалы и прямоугольники имеют четко определенную область. Но если Ваш путь составлен из перекрывающихся сегментов или если путь включает многократные подпути, такие как концентрические круги, показанные на рисунке 3-12, существует два правила, которые можно использовать для определения закрашенной области.

Правило заливки по умолчанию вызывают ненулевым вьющимся правилом числа. Чтобы определить, должен ли отдельный момент быть нарисован, запустите в точке и чертите линию вне границ получения. Начиная с количества 0, добавьте 1 к количеству каждый раз, когда сегмент контура пересекает строку слева направо, и вычтите 1 каждый раз, когда сегмент контура пересекает строку справа налево. Если результат 0, точка не красится. Иначе, точка красится. Направление, что сегменты контура нарисованы, влияет на результат. Рисунок 3-12 показывает два набора внутренних и внешних кругов, заполняющихся с помощью ненулевого вьющегося правила числа. Когда каждый круг нарисован в том же направлении, оба круга заполнены. Когда круги нарисованы в противоположных направлениях, внутренний круг не заполнен.

Можно решить использовать ровно-нечетное правило. Чтобы определить, должен ли отдельный момент быть нарисован, запустите в точке и чертите линию вне границ получения. Считайте число сегментов контура, которые пересекает строка. Если результат нечетен, точка красится. Если результат даже, точка не красится. Направление, что сегменты контура нарисованы, не влияет на результат. Как Вы видите на рисунке 3-12, он не имеет значения, какое направление каждый круг нарисован, заливка всегда будет как показано.

Рисунок 3-12  Концентрические круги заполнил использование различных правил заливки
Concentric circles filled using different fill rules

Кварц обеспечивает функции, показанные в Таблице 3-5 для заполнения текущего пути. Некоторые - функции удобства для перечеркивания прямоугольников или замещающих знаков.

Табличные 3-5  Функции та заливка пути

Функция

Описание

CGContextEOFillPath

Заполняет текущий путь с помощью ровно-нечетного правила.

CGContextFillPath

Заполняет текущий путь с помощью ненулевого вьющегося правила числа.

CGContextFillRect

Заполняет область, соответствующую в указанном прямоугольнике.

CGContextFillRects

Заполняет области, который соответствует в указанных прямоугольниках.

CGContextFillEllipseInRect

Заполняет эллипс, соответствующий в указанном прямоугольнике.

CGContextDrawPath

Если Вы передаете, заполняет текущий путь kCGPathFill (ненулевое вьющееся правило числа) или kCGPathEOFill (ровно-нечетное правило). Заливки и штрихи текущий путь, если Вы передаете kCGPathFillStroke или kCGPathEOFillStroke.

Установка режимов смешивания

Режимы смешивания указывают, как Кварц применяет краску по фону. Кварц использует нормальный режим смешивания по умолчанию, комбинирующий рисование переднего плана с фоновым рисованием с помощью следующей формулы:

result = (alpha * foreground) + (1 - alpha) * background

Цветовые и Цветовые пространства обеспечивают детальное обсуждение альфа-компонента цвета, указывающего непрозрачность цвета. Для примеров в этом разделе можно предположить, что цвет абсолютно непрозрачен (альфа-значение = 1.0). Для непрозрачных цветов, когда Вы красите использующий нормальный режим смешивания, что-либо, которое Вы красите по фону полностью, затеняет фон.

Можно установить режим смешивания для достижения множества эффектов путем вызывания функции CGContextSetBlendMode, передача надлежащего постоянного режима смешивания. Следует иметь в виду, что режим смешивания является частью состояния графики. Если Вы используете функцию CGContextSaveGState до изменения режима смешивания, затем вызывая функцию CGContextRestoreGState сбрасывает режим смешивания к нормальному.

Остальная часть этого раздела показывает результаты рисования прямоугольников, показанных на рисунке 3-13 по прямоугольникам, показанным на рисунке 3-14. В каждом случае (Рисунок 3-15 через рисунок 3-30), фоновые прямоугольники красятся с помощью нормального режима смешивания. Тогда режим смешивания изменяется путем вызывания функции CGContextSetBlendMode с надлежащей константой. Наконец, приоритетные прямоугольники красятся.

Рисунок 3-13  прямоугольники нарисовал в
The rectangles painted in the foreground
foregroundFigure 3-14
  прямоугольники нарисованными в фоновом режиме
The rectangles painted in the background

Нормальный режим смешивания

Поскольку нормальный режим смешивания является режимом смешивания по умолчанию, Вы вызываете функцию CGContextSetBlendMode с константой kCGBlendModeNormal только для сброса режима смешивания назад к значению по умолчанию после использования одной из других констант режима смешивания. Рисунок 3-15 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью нормального режима смешивания.

  Прямоугольники рисунка 3-15 нарисовали использование нормального режима смешивания
Rectangles painted using normal blend mode

Умножьте режим смешивания

Умножьтесь режим смешивания указывает для умножения выборок изображения переднего раздела с выборками фонового изображения. Итоговые цвета являются, по крайней мере, столь же темными как любой из двух способствующих демонстрационных цветов. Рисунок 3-16 показывает, что результат рисования рисунка 3-13 по использованию рисунка 3-14 умножает режим смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeMultiply.

  Нарисованное использование Прямоугольников рисунка 3-16 умножает режим смешивания
Rectangles painted using multiply blend mode

Экранируйте режим смешивания

Экранный режим смешивания указывает для умножения инверсии выборок изображения переднего раздела с инверсией выборок фонового изображения. Итоговые цвета, по крайней мере, так же легки как любой из двух способствующих демонстрационных цветов. Рисунок 3-17 показывает, что результат рисования рисунка 3-13 по использованию рисунка 3-14 экранирует режим смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeScreen.

  Прямоугольники рисунка 3-17, нарисованные использующий экранный режим смешивания
Rectangles painted using screen blend mode

Наложите режим смешивания

Режим смешивания наложения указывает, чтобы или умножить или экранировать выборки изображения переднего раздела с выборками фонового изображения, в зависимости от цвета фона. Цвет фона смешивается с основным цветом для отражения легкости или темноты фона. Рисунок 3-18 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания наложения. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeOverlay.

  Прямоугольники рисунка 3-18, нарисованные использующий режим смешивания наложения
Rectangles painted using overlay blend mode

Затемните режим смешивания

Указывает для создания составных выборок изображения путем выбора более темных выборок (или от изображения переднего раздела или от фона). Выборки фонового изображения заменяются любыми выборками изображения переднего раздела, которые являются более темными. Иначе, выборки фонового изображения оставлены без изменений. Рисунок 3-19 показывает, что результат рисования рисунка 3-13 по использованию рисунка 3-14 затемняет режим смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeDarken.

  Нарисованное использование Прямоугольников рисунка 3-19 затемняет режим смешивания
Rectangles painted using darken blend mode

Осветите режим смешивания

Указывает для создания составных выборок изображения путем выбора более легких выборок (или от переднего плана или от фона). Результат состоит в том, что выборки фонового изображения заменяются любыми выборками изображения переднего раздела, которые легче. Иначе, выборки фонового изображения оставлены без изменений. Рисунок 3-20 показывает, что результат рисования рисунка 3-13 по использованию рисунка 3-14 освещает режим смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeLighten.

  Нарисованное использование Прямоугольников рисунка 3-20 освещает режим смешивания
Rectangles painted using lighten blend mode

Цветной Dodge Blend Mode

Указывает для прояснения выборок фонового изображения для отражения выборок изображения переднего раздела. Демонстрационные значения изображения переднего раздела, указывающие черный, не вызывают изменение. Рисунок 3-21 показывает, что результат рисования рисунка 3-13 по рисунку 3-14 с помощью цвета избегает режима смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeColorDodge.

  Прямоугольники рисунка 3-21, нарисованные использующий цвет, избегают режима смешивания
Rectangles painted using color dodge blend mode

Цветной режим смешивания записи

Указывает для затемнения выборок фонового изображения для отражения выборок изображения переднего раздела. Демонстрационные значения изображения переднего раздела, указывающие белый, не вызывают изменение. Рисунок 3-22 показывает, что результат рисования рисунка 3-13 по рисунку 3-14 с помощью цвета записывает режим смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeColorBurn.

  Прямоугольники рисунка 3-22, нарисованные использующий цвет, записывают режим смешивания
Rectangles painted using color burn blend mode

Режим смешивания рассеянного света

Указывает, чтобы или затемнить или осветить цвета, в зависимости от демонстрационного цвета изображения переднего раздела. Если демонстрационный цвет изображения переднего раздела легче, чем 50%-й серый, фон освещается, подобен уклонению. Если демонстрационный цвет изображения переднего раздела является более темным, чем 50%-й серый, фон затемняется, подобен записи. Если демонстрационный цвет изображения переднего раздела равен 50%-му серому, фон не изменяется. Выборки изображения, которые равны чистому черному или чистому белому продукту более темные или более легкие области, но не приводят к чистому черному или белый. Полный эффект подобен тому, чего Вы достигли бы путем блистания рассеянный центр внимания на изображении переднего раздела. Используйте это для добавления выделений к сцене. Рисунок 3-23 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания рассеянного света. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeSoftLight.

  Прямоугольники рисунка 3-23, нарисованные использующий режим смешивания рассеянного света
Rectangles painted using soft light blend mode

Режим смешивания жесткого света

Указывает для или умножения или цвета экрана, в зависимости от демонстрационного цвета изображения переднего раздела. Если демонстрационный цвет изображения переднего раздела легче, чем 50%-й серый, фон освещается, подобен экранированию. Если демонстрационный цвет изображения переднего раздела является более темным, чем 50%-й серый, фон затемняется, подобен умножению. Если демонстрационный цвет изображения переднего раздела равен 50%-му серому, изображение переднего раздела не изменяется. Выборки изображения, которые являются равными чистому черному или чистому белому результату в чистом черном или белыми. Полный эффект подобен тому, чего Вы достигли бы путем блистания резкий центр внимания на изображении переднего раздела. Используйте это для добавления выделений к сцене. Рисунок 3-24 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания жесткого света. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeHardLight.

  Прямоугольники рисунка 3-24, нарисованные использующий режим смешивания жесткого света
Rectangles painted using hard light blend mode

Режим смешивания различия

Указывает для вычитания или демонстрационного цвета изображения переднего раздела из демонстрационного цвета фонового изображения или реверса, в зависимости от которого выборка имеет большее значение яркости. Демонстрационные значения изображения переднего раздела, которые являются черными, не вызывают изменения; белое инвертирование значения цвета фона. Рисунок 3-25 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания различия. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeDifference.

  Прямоугольники рисунка 3-25 нарисовали использование режима смешивания различия
Rectangles painted using difference blend mode

Режим смешивания исключения

Указывает эффект, подобный произведенному kCGBlendModeDifference, но с более низким контрастом. Демонстрационные значения изображения переднего раздела, которые являются черными, не вызывают изменение; белое инвертирование значения цвета фона. Рисунок 3-26 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания исключения. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeExclusion.

  Прямоугольники рисунка 3-26 нарисовали использование режима смешивания исключения
Rectangles painted using exclusion blend mode

Режим смешивания оттенка

Указывает для использования яркости и степеней насыщения фона с оттенком изображения переднего раздела. Рисунок 3-27 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания оттенка. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeHue.

  Прямоугольники рисунка 3-27 нарисовали использование режима смешивания оттенка
Rectangles painted using hue blend mode

Режим смешивания насыщенности

Указывает для использования яркости и значений оттенка фона с насыщенностью изображения переднего раздела. Области фона, не имеющие никакой насыщенности (т.е. чистые серые области) не вызывают изменение. Рисунок 3-28 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания насыщенности. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeSaturation.

  Прямоугольники рисунка 3-28 нарисовали использование режима смешивания насыщенности
Rectangles painted using saturation blend mode

Цветной режим смешивания

Указывает для использования значений яркости фона с оттенком и степенями насыщения изображения переднего раздела. Этот режим сохраняет уровни серого в изображении. Можно использовать этот режим, чтобы окрасить монохромные изображения или окрасить цветные изображения. Рисунок 3-29 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью цветного режима смешивания. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeColor.

  Прямоугольники рисунка 3-29, нарисованные использующий цветной режим смешивания
Rectangles painted using color blend mode

Режим смешивания яркости

Указывает для использования оттенка и насыщенности фона с яркостью изображения переднего раздела. Этот режим создает эффект, который является обратным к эффекту, создаваемому kCGBlendModeColor. Рисунок 3-30 показывает результат рисования рисунка 3-13 по рисунку 3-14 с помощью режима смешивания яркости. Для использования этого режима смешивания вызовите функцию CGContextSetBlendMode с константой kCGBlendModeLuminosity.

  Прямоугольники рисунка 3-30 нарисовали использование режима смешивания яркости
Rectangles painted using luminosity blend mode

Отсечение к пути

Текущая область отсечения создается из пути, служащего маской, позволяя Вам блокировать часть страницы, которую Вы не хотите красить. Например, если Вы имеете очень большое растровое изображение и хотите показать только небольшую часть ее, Вы могли установить область отсечения для отображения только части, которую Вы хотите показать.

Когда Вы красите, Кварцевый рендеринг красит только в области отсечения. Рисование, происходящее в закрытых подпутях области отсечения, видимо; рисование, происходящее вне закрытых подпутей области отсечения, не.

Когда графический контекст первоначально создается, область отсечения включает всю paintable область контекста (например, поле носителей контекста PDF). Вы изменяете область отсечения путем установки текущего пути и затем использования функции отсечения вместо функции получения. Функция отсечения пересекает область заливки текущего пути с существующей областью отсечения. Таким образом можно пересечь область отсечения, уменьшив видимую область изображения, но Вы не можете увеличить область области отсечения.

Областью отсечения является часть состояния графики. Для восстановления области отсечения к предыдущему состоянию можно сохранить состояние графики, прежде чем Вы отсечете и восстановите состояние графики после того, как Вы сделаны с отсеченным получением.

Перечисление 3-1 показывает фрагмент кода, устанавливающий область отсечения в форме круга. Это получение причин кода, которое будет отсечено, подобный тому, что показано на рисунке 3-3. (Для другого примера посмотрите Клип Контекст в главе Градиенты.)

Перечисление 3-1  , Настраивающее круговую отсекаемую область

CGContextBeginPath (context);
CGContextAddArc (context, w/2, h/2, ((w>h) ? h : w)/2, 0, 2*PI, 0);
CGContextClosePath (context);
CGContextClip (context);
Табличные 3-6  Функции, отсекающие графический контекст

Функция

Описание

CGContextClip

Использует ненулевое вьющееся правило числа вычислить пересечение текущего пути с текущей траекторией отсечения.

CGContextEOClip

Использует ровно-нечетное правило вычислить пересечение текущего пути с текущей траекторией отсечения.

CGContextClipToRect

Устанавливает область отсечения в область, пересекающую и текущую траекторию отсечения и указанный прямоугольник.

CGContextClipToRects

Устанавливает область отсечения в область, пересекающую и текущую траекторию отсечения и область в указанных прямоугольниках.

CGContextClipToMask

Отображает маску в указанный прямоугольник и пересекает его с текущей областью отсечения графического контекста. Любой последующий путь, привлекающий Вас, выполняет к графическому контексту, отсекается. (См. Маскирование Изображения путем Отсечения Контекста.)