Обзор 2D кварца

2D кварц является двумерным механизмом получения, доступным в среде iOS и от всех сред приложения Mac OS X за пределами ядра. Можно использовать Кварц 2D прикладной программный интерфейс (API) для получения доступа к функциям, таким как находящееся на пути получение, красящее прозрачностью, штриховкой, таща тени, слои прозрачности, управление цветом, сгладили рендеринг, генерацию документа в формате PDF и доступ метаданных PDF. Каждый раз, когда возможно, Кварц 2D левереджи питание аппаратного обеспечения машинной графики.

В Mac OS X 2D Кварц может работать со всеми другими графическими и технологиями формирования изображений — Базовое Изображение, Базовое Видео, OpenGL и QuickTime. Возможно создать изображение в Кварце от средства импорта графики QuickTime, с помощью функции QuickTime GraphicsImportCreateCGImage. Посмотрите Ссылку Платформы QuickTime для подробных данных. Перемещение Данных Между Кварцем, который описывает 2D и Базовое Изображение в Mac OS X, как можно обеспечить изображения для Базового Изображения, которое является платформой, поддерживающей обработку изображений.

Точно так же в iOS, Кварц 2D работы со всей доступной графикой и технологиями анимации, такими как Базовая Анимация, OpenGL ES и классы UIKit.

Страница

Кварц 2D использование модель живописца для ее обработки изображений. В модели живописца каждая последовательная операция рисования применяет уровень «краски» к выводу «холст», часто называемый страницей. Краска на странице может быть изменена путем накладывания большего количества краски посредством дополнительных операций рисования. Объект, продвинутый страница, не может быть изменен кроме путем накладывания большего количества краски. Эта модель позволяет Вам создавать чрезвычайно сложные изображения из небольшого количества мощных примитивов.

Рисунок 1-1 показывает, как работает модель живописца. Для получения изображения в верхней части числа форма слева была нарисована сначала сопровождаемая существенной формой. Существенная форма накладывает первую форму, затеняя всех кроме периметра первой формы. Формы нарисованы в противоположном порядке в нижней части числа с существенной формой, нарисованной сначала. Как Вы видите в модели живописца, порядок получения важен.

Рисунок 1-1  модель живописца
The painter’s model

Страница может быть реальным листком бумаги (если устройство вывода является принтером); это может быть виртуальный листок бумаги (если устройство вывода является файлом PDF); это может даже быть растровое изображение. Точный характер страницы зависит от определенного графического контекста, который Вы используете.

Привлечение мест назначения: графический контекст

Графический контекст является непрозрачным типом данных (CGContextRef) это инкапсулирует информационное Кварцевое использование для рисования изображений к устройству вывода, таких как файл PDF, битовый массив или окно на дисплее. Информация в графическом контексте включает параметры рисования графики и специфичное для устройства представление краски на странице. Все объекты в Кварце рисуются к или содержатся, графический контекст.

Можно думать о графическом контексте как место назначения получения, как показано на рисунке 1-2. Когда Вы рисуете с Кварцем, все специфичные для устройства характеристики содержатся в определенном типе графического контекста, который Вы используете. Другими словами, можно нарисовать то же изображение к различному устройству просто путем обеспечения различного графического контекста для той же последовательности Кварцевых подпрограмм рисования. Вы не должны выполнять специфичные для устройства вычисления; Кварц делает это для Вас.

  Кварцевые места назначения рисования рисунка 1-2
Quartz drawing destinations

Эти графические контексты доступны Вашему приложению:

Кварц 2D непрозрачные типы данных

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

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

Рисунок 1-3  Непрозрачные типы данных является основанием рисования примитивов в 2D Кварце
Opaque data types are the basis of drawing primitives in Quartz 2D

Непрозрачные типы данных, доступные в 2D Кварце, включают следующее:

Состояния графики

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

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

Для сохранения текущего состояния графики используйте функцию CGContextSaveGState продвигать копию текущего состояния графики на штабель. Для восстановления ранее сохраненного состояния графики используйте функцию CGContextRestoreGState для замены текущего состояния графики состоянием графики, это поверх штабеля.

Обратите внимание на то, что не всеми аспектами текущей среды получения являются элементы состояния графики. Например, когда Вы вызываете функцию, текущий путь не считают частью состояния графики и поэтому не сохраняют CGContextSaveGState. Параметры состояния графики, сохраняющиеся, когда Вы вызываете эту функцию, перечислены в Таблице 1-1.

Табличные 1-1  Параметры, связанные с состоянием графики

Параметры

Обсужденный в этой главе

Текущая матрица преобразования (CTM)

Преобразовывает

Область Clipping

Пути

Строка: ширина, соединение, прописная буква, тире, предельный угол стыка

Пути

Точность оценки кривой (плоскость)

Пути

Настройка сглаживания

Графические контексты

Цвет: заливка и значения параметров обводки

Цветовые и цветовые пространства

Альфа-значение (прозрачность)

Цветовые и цветовые пространства

Рендеринг намерения

Цветовые и цветовые пространства

Цветовое пространство: заливка и значения параметров обводки

Цветовые и цветовые пространства

Текст: шрифт, размер шрифта, межсимвольный интервал, текстовый режим получения

Текст

Режим смешивания

Пути и растровые изображения и маски изображения

Кварц 2D системы координат

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

Рисунок 1-4  Кварцевая система координат
The Quartz coordinate system

Поскольку различные устройства имеют различные базовые возможности обработки изображений, расположения и размеры графики должны быть определены независящим от устройств способом. Например, в то время как принтер мог бы быть способен к отображению 300 пикселей на дюйм, устройство отображения на экране могло бы быть способно к отображению не больше, чем 96 пикселей на дюйм. При определении системы координат на уровне устройств (в этом примере, или 96 пикселей или 300 пикселей), объекты, нарисованные в том пространстве, не могут быть воспроизведены на других устройствах без видимого искажения. Они будут казаться слишком большими или слишком маленькими.

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

Текущая матрица преобразования имеет вторичную цель: Это позволяет Вам преобразовывать, как нарисованы объекты. Например, для рисования поля, повернутого на 45 градусов, Вы поворачиваете систему координат страницы (CTM) перед рисованием поля. Кварц рисует к устройству вывода с помощью повернутой системы координат.

Точка в пространстве пользователя представлена координатной парой (x, y), где x представляет расположение вдоль горизонтальной (левой и правой) оси, и y представляет вертикальную ось (вверх и вниз). Источник пользовательского координатного пространства является точкой (0,0). Источник расположен в нижнем левом углу страницы, как показано на рисунке 1-4. В системе координат по умолчанию для Кварца увеличения оси X, поскольку это перемещается слева к праву страницы. Повышения стоимости оси y, поскольку это перемещается от нижней части к началу страницы.

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

Причина UIKit возвращает Кварцевые контексты рисования с измененными системами координат, состоит в том, что UIKit использует различное координатное соглашение по умолчанию; это применяет преобразование к Кварцевым контекстам, которые это создает так, чтобы они соответствовали его соглашения. Если Ваше приложение хочет использовать те же подпрограммы получения для рисования обоим a UIView возразите и контекст графики PDF (который создается Кварцем и использует систему координат по умолчанию), необходимо применить преобразование так, чтобы контекст графики PDF получил ту же измененную систему координат. Чтобы сделать это, примените преобразование, переводящее источник в верхний левый угол контекста PDF и масштабирующее y-координату -1.

Используя преобразование масштабирования для отрицания y-координаты изменяет некоторые соглашения в Кварцевом получении. Например, если Вы вызываете CGContextDrawImage для вовлечения изображения в контекст изображение изменяется преобразованием, когда это вовлечено в место назначения. Точно так же подпрограммы рисования пути принимают параметры, указывающие, нарисована ли дуга в по часовой стрелке или направление против часовой стрелки в системе координат по умолчанию. Если система координат изменяется, результат также изменяется, как будто изображение было отражено в зеркале. На рисунке 1-5 передавая те же параметры в Кварцевые результаты в по часовой стрелке дуге в системе координат по умолчанию и против часовой стрелки дуга после того, как y-координата отрицается преобразованием.

Рисунок 1-5  , Изменяющий систему координат, создает зеркальное изображение.

Именно до Вашего приложения для корректировки любых Кварцевых вызовов это делает к контексту, применились к преобразованию это. Например, если Вы хотите, чтобы изображение или PDF нарисовали правильно в графический контекст, Ваше приложение, возможно, должно временно скорректировать CTM графического контекста. В iOS, если Вы используете a UIImage возразите для обертывания a CGImage объект, который Вы создаете, Вы не должны изменять CTM. UIImage объект автоматически компенсирует измененную систему координат, примененную UIKit.

Управление памятью: монопольное использование объекта

Кварц использует Базовую модель управления памятью Основы, в которой объекты являются считаемой ссылкой. Когда создается, Базовые объекты Основы начинаются с подсчетом ссылок 1. Можно постепенно увеличить подсчет ссылок путем вызывания функции, чтобы сохранить объект и постепенно уменьшить подсчет ссылок путем вызывания функции для выпуска объекта. Когда подсчет ссылок постепенно уменьшается к 0, объект освобожден. Эта модель позволяет объектам безопасно совместно использовать ссылки на другие объекты.

Существует несколько простых правил иметь в виду: