Обзор 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 показывает, как работает модель живописца. Для получения изображения в верхней части числа форма слева была нарисована сначала сопровождаемая существенной формой. Существенная форма накладывает первую форму, затеняя всех кроме периметра первой формы. Формы нарисованы в противоположном порядке в нижней части числа с существенной формой, нарисованной сначала. Как Вы видите в модели живописца, порядок получения важен.
Страница может быть реальным листком бумаги (если устройство вывода является принтером); это может быть виртуальный листок бумаги (если устройство вывода является файлом PDF); это может даже быть растровое изображение. Точный характер страницы зависит от определенного графического контекста, который Вы используете.
Привлечение мест назначения: графический контекст
Графический контекст является непрозрачным типом данных (CGContextRef
) это инкапсулирует информационное Кварцевое использование для рисования изображений к устройству вывода, таких как файл PDF, битовый массив или окно на дисплее. Информация в графическом контексте включает параметры рисования графики и специфичное для устройства представление краски на странице. Все объекты в Кварце рисуются к или содержатся, графический контекст.
Можно думать о графическом контексте как место назначения получения, как показано на рисунке 1-2. Когда Вы рисуете с Кварцем, все специфичные для устройства характеристики содержатся в определенном типе графического контекста, который Вы используете. Другими словами, можно нарисовать то же изображение к различному устройству просто путем обеспечения различного графического контекста для той же последовательности Кварцевых подпрограмм рисования. Вы не должны выполнять специфичные для устройства вычисления; Кварц делает это для Вас.
Эти графические контексты доступны Вашему приложению:
Контекст растрового изображения позволяет Вам красить цвета RGB, цвета CMYK или шкалу полутонов в битовый массив. Битовый массив является прямоугольной антенной решеткой (или растр) пикселей, каждого пикселя, представляющего точку в изображении. Растровые изображения также вызывают выбранными изображениями. Посмотрите Создание Контекста Растрового изображения.
Контекст графики PDF позволяет Вам создавать файл PDF. В файле PDF Ваше получение сохраняется как последовательность команд. Существуют некоторые существенные различия между файлами PDF и битовыми массивами:
Файлы PDF, в отличие от битовых массивов, могут содержать больше чем одну страницу.
При рисовании страницы из файла PDF на различном устройстве получающееся изображение оптимизировано для характеристик дисплея того устройства.
Файлы PDF являются разрешением, независимым по своей природе — размер, в котором они привлечены, может быть увеличен или уменьшен бесконечно, не жертвуя подробностью изображения. Воспринятое пользователями качество растрового изображения связывается к разрешению, в котором битовый массив предназначается, чтобы быть просмотренным.
Посмотрите создание контекста графики PDF.
Контекст графики окна является графическим контекстом, который можно использовать для вовлечения окна. Обратите внимание на то, что, потому что 2D Кварц является графическим механизмом и не системой управления окнами, Вы используете одну из сред разработки приложения для получения графического контекста для окна. Посмотрите Создание Контекста Графики Окна в Mac OS X для подробных данных.
Контекст уровня (
CGLayerRef
) внеэкранное место назначения получения, связанное с другим графическим контекстом. Это разработано для оптимальной производительности при рисовании уровня к графическому контексту, создавшему его. Контекст уровня может быть намного лучшим выбором для внеэкранного получения, чем контекст растрового изображения. Посмотрите, что Базовый Графический Уровень Рисует.Когда Вы хотите распечатать в Mac OS X, Вы отправляете свое содержание в контекст графики PostScript, которым управляет платформа печати. Посмотрите Получение Графического Контекста для Печати для получения дополнительной информации.
Кварц 2D непрозрачные типы данных
Кварц 2D API определяет множество непрозрачных типов данных в дополнение к графическим контекстам. Поскольку API является частью Базовой Графической платформы, типы данных и подпрограммы, воздействующие на них, используют префикс CG.
2D кварц создает объекты из непрозрачных типов данных, на которые воздействует Ваше приложение достигнуть определенного вывода получения. Рисунок 1-3 показывает виды результатов, которых можно достигнуть при применении операций рисования к трем из объектов, предоставленных 2D Кварцем. Например:
Можно повернуть и вывести на экран страницу PDF, создав объект страницы PDF, применив работу вращения к графическому контексту и прося, чтобы Кварц, 2D, нарисовал страницу к графическому контексту.
Можно нарисовать образец путем создания объекта образца, определения формы, составляющей образец и установку Кварца, 2D для использования образца в качестве краски, когда это рисует к графическому контексту.
Можно заполнить область осевой или радиальной штриховкой путем создания объекта штриховки, обеспечение функции, определяющей цвет в каждой точке в штриховке и затем выяснении у Кварца, 2D для использования штриховки в качестве цвета заливки.
Непрозрачные типы данных, доступные в 2D Кварце, включают следующее:
CGPathRef
, используемый для векторной графики для создания путей, которые Вы заполняете или перечеркиваете. Посмотрите Пути.CGImageRef
, используемый для представления растровых изображений и масок растрового изображения на основе демонстрационных данных, которыми Вы снабжаете. Посмотрите Маски Изображения и Растровые изображения.CGLayerRef
, используемый для представления уровня получения, который может использоваться для повторного получения (такой что касается фонов или образцов) и для внеэкранного получения. Посмотрите, что Базовый Графический Уровень РисуетCGPatternRef
, используемый для повторного получения. Посмотрите Образцы.CGShadingRef
иCGGradientRef
, используемый для рисования градиентов. Посмотрите Градиенты.CGFunctionRef
, используемый для определения функций обратного вызова, берущих произвольное число параметров с плавающей точкой. Вы используете этот тип данных при создании градиентов для штриховки. Посмотрите Градиенты.CGColorRef
иCGColorSpaceRef
, используемый для информирования Кварца, как интерпретировать цвет. Посмотрите Цветовые и Цветовые пространства.CGImageSourceRef
иCGImageDestinationRef
, который Вы используете для перемещения данных в и из Кварца. Посмотрите управление данными в 2D Кварце и Изображение Руководство по программированию I/O.CGPDFDictionaryRef
,CGPDFObjectRef
,CGPDFPageRef
,CGPDFStream
,CGPDFStringRef
, иCGPDFArrayRef
, которые обеспечивают доступ к метаданным PDF. Посмотрите Создание Документа в формате PDF, Просмотр и Преобразование.CGPDFScannerRef
иCGPDFContentStreamRef
, которые анализируют метаданные PDF. См., что Документ в формате PDF Анализирует.CGPSConverterRef
, используемый для преобразования PostScript в PDF. Это не доступно в iOS. Посмотрите Преобразование PostScript.
Состояния графики
Кварц изменяет результаты операций рисования согласно параметрам в текущем состоянии графики. Состояние графики содержит параметры, которые были бы иначе взяты в качестве параметров рисованию подпрограмм. Подпрограммы, рисующие к графическому контексту, консультируются с состоянием графики, чтобы определить, как представить их результаты. Например, когда Вы вызываете функцию для установки цвета заливки, Вы изменяете значение, сохраненное в текущем состоянии графики. Другие обычно используемые элементы текущего состояния графики включают ширину строки, текущую позицию и размер шрифта текста.
Графический контекст содержит штабель состояний графики. Когда Кварц создает графический контекст, штабель пуст. При сохранении состояния графики Кварц продвигает копию текущего состояния графики на штабель. При восстановлении состояния графики Кварц выталкивает состояние графики от вершины штабеля. Вытолканное состояние становится текущим состоянием графики.
Для сохранения текущего состояния графики используйте функцию CGContextSaveGState
продвигать копию текущего состояния графики на штабель. Для восстановления ранее сохраненного состояния графики используйте функцию CGContextRestoreGState
для замены текущего состояния графики состоянием графики, это поверх штабеля.
Обратите внимание на то, что не всеми аспектами текущей среды получения являются элементы состояния графики. Например, когда Вы вызываете функцию, текущий путь не считают частью состояния графики и поэтому не сохраняют CGContextSaveGState
. Параметры состояния графики, сохраняющиеся, когда Вы вызываете эту функцию, перечислены в Таблице 1-1.
Параметры | Обсужденный в этой главе |
---|---|
Текущая матрица преобразования (CTM) | |
Область Clipping | |
Строка: ширина, соединение, прописная буква, тире, предельный угол стыка | |
Точность оценки кривой (плоскость) | |
Настройка сглаживания | |
Цвет: заливка и значения параметров обводки | |
Альфа-значение (прозрачность) | |
Рендеринг намерения | |
Цветовое пространство: заливка и значения параметров обводки | |
Текст: шрифт, размер шрифта, межсимвольный интервал, текстовый режим получения | |
Режим смешивания |
Кварц 2D системы координат
Система координат, показанная на рисунке 1-4, определяет диапазон расположений, используемых для выражения расположения и размеров объектов, которые будут нарисованы на странице. Вы указываете расположение и размер графики в системе координат пространства пользователя, или, проще, пространство пользователя. Координаты определяются как значения с плавающей точкой.
Поскольку различные устройства имеют различные базовые возможности обработки изображений, расположения и размеры графики должны быть определены независящим от устройств способом. Например, в то время как принтер мог бы быть способен к отображению 300 пикселей на дюйм, устройство отображения на экране могло бы быть способно к отображению не больше, чем 96 пикселей на дюйм. При определении системы координат на уровне устройств (в этом примере, или 96 пикселей или 300 пикселей), объекты, нарисованные в том пространстве, не могут быть воспроизведены на других устройствах без видимого искажения. Они будут казаться слишком большими или слишком маленькими.
Кварц выполняет независимость от устройств с отдельной системой координат — пространством пользователя — отображением ее к системе координат устройства вывода — пространства устройства — использование текущей матрицы преобразования или CTM. Матрица является математической конструкцией, используемой для эффективного описания ряда связанных уравнений. Текущая матрица преобразования является определенным типом матрицы, названной аффинным преобразованием, отображающим точки от одного координатного пространства до другого путем применения перевода, вращения и операций масштабирования (вычисления, перемещающие, поворачивающие и изменяющие размеры системы координат).
Текущая матрица преобразования имеет вторичную цель: Это позволяет Вам преобразовывать, как нарисованы объекты. Например, для рисования поля, повернутого на 45 градусов, Вы поворачиваете систему координат страницы (CTM) перед рисованием поля. Кварц рисует к устройству вывода с помощью повернутой системы координат.
Точка в пространстве пользователя представлена координатной парой (x, y), где x представляет расположение вдоль горизонтальной (левой и правой) оси, и y представляет вертикальную ось (вверх и вниз). Источник пользовательского координатного пространства является точкой (0,0). Источник расположен в нижнем левом углу страницы, как показано на рисунке 1-4. В системе координат по умолчанию для Кварца увеличения оси X, поскольку это перемещается слева к праву страницы. Повышения стоимости оси y, поскольку это перемещается от нижней части к началу страницы.
Некоторые технологии устанавливают свои графические контексты с помощью различной системы координат по умолчанию, чем та, используемая Кварцем. Относительно Кварца такая система координат является измененной системой координат и должна быть компенсирована при выполнении некоторых Кварцевых операций рисования. Наиболее распространенная измененная система координат помещает источник в верхний левый угол контекста и изменяет ось y для указания на конец страницы. Несколько мест, где Вы могли бы видеть эту определенную используемую систему координат, являются следующим:
В Mac OS X, подклассе
NSView
это переопределяетisFlipped
метод для возвратаYES
.В iOS, контекст получения, возвращенный
UIView
.В iOS, контекст получения, создаваемый путем вызова
UIGraphicsBeginImageContextWithOptions
функция.
Причина UIKit возвращает Кварцевые контексты рисования с измененными системами координат, состоит в том, что UIKit использует различное координатное соглашение по умолчанию; это применяет преобразование к Кварцевым контекстам, которые это создает так, чтобы они соответствовали его соглашения. Если Ваше приложение хочет использовать те же подпрограммы получения для рисования обоим a UIView
возразите и контекст графики PDF (который создается Кварцем и использует систему координат по умолчанию), необходимо применить преобразование так, чтобы контекст графики PDF получил ту же измененную систему координат. Чтобы сделать это, примените преобразование, переводящее источник в верхний левый угол контекста PDF и масштабирующее y-координату -1
.
Используя преобразование масштабирования для отрицания y-координаты изменяет некоторые соглашения в Кварцевом получении. Например, если Вы вызываете CGContextDrawImage
для вовлечения изображения в контекст изображение изменяется преобразованием, когда это вовлечено в место назначения. Точно так же подпрограммы рисования пути принимают параметры, указывающие, нарисована ли дуга в по часовой стрелке или направление против часовой стрелки в системе координат по умолчанию. Если система координат изменяется, результат также изменяется, как будто изображение было отражено в зеркале. На рисунке 1-5 передавая те же параметры в Кварцевые результаты в по часовой стрелке дуге в системе координат по умолчанию и против часовой стрелки дуга после того, как y-координата отрицается преобразованием.
Именно до Вашего приложения для корректировки любых Кварцевых вызовов это делает к контексту, применились к преобразованию это. Например, если Вы хотите, чтобы изображение или PDF нарисовали правильно в графический контекст, Ваше приложение, возможно, должно временно скорректировать CTM графического контекста. В iOS, если Вы используете a UIImage
возразите для обертывания a CGImage
объект, который Вы создаете, Вы не должны изменять CTM. UIImage
объект автоматически компенсирует измененную систему координат, примененную UIKit.
Управление памятью: монопольное использование объекта
Кварц использует Базовую модель управления памятью Основы, в которой объекты являются считаемой ссылкой. Когда создается, Базовые объекты Основы начинаются с подсчетом ссылок 1. Можно постепенно увеличить подсчет ссылок путем вызывания функции, чтобы сохранить объект и постепенно уменьшить подсчет ссылок путем вызывания функции для выпуска объекта. Когда подсчет ссылок постепенно уменьшается к 0, объект освобожден. Эта модель позволяет объектам безопасно совместно использовать ссылки на другие объекты.
Существует несколько простых правил иметь в виду:
Если Вы создаете или копируете объект, Вам принадлежит он, и поэтому необходимо выпустить его. Т.е. в целом при получении объекта из функции со словами «Create» или «Копией» на ее имя необходимо выпустить объект, когда Вы сделаны с ним. Иначе, утечка памяти заканчивается.
Если Вы получаете объект из функции, не содержащей слова «Create» или «Копию» на ее имя, Вам не принадлежит ссылка на объект, и Вы не должны выпускать его. Объект будет выпущен его владельцем в некоторый момент в будущем.
Если Вам не принадлежит объект, и необходимо иметь в наличии его, необходимо сохранить его и выпустить его, когда Вы сделаны с ним. Вы используете Кварц 2D функции, определенные для объекта сохранить и выпустить тот объект. Например, при получении ссылки на объект CGColorspace Вы используете функции
CGColorSpaceRetain
иCGColorSpaceRelease
сохранить и выпустить объект по мере необходимости. Можно также использовать Базовые функции ОсновыCFRetain
иCFRelease
, но необходимо бояться передаватьNULL
к этим функциям.