Quartz 2D
Quartz 2D — это двухмерный графический движок (рендеринговый движок), входящий в состав графической подсистемы Quartz в операционных системах macOS и iOS. Он является частью Core Graphics framework и отвечает за отрисовку векторной графики, растровых изображений, текста и управление цветом, обеспечивая аппаратно-ускоренный вывод на экран и принтер.
История
Разработка Quartz 2D началась в конце 1990-х годов как часть операционной системы Mac OS X (ныне macOS). В основе Quartz 2D лежит технология Display PostScript, использовавшаяся в NeXTSTEP, но адаптированная для работы с Portable Document Format (PDF). Первая публичная версия Quartz 2D была представлена в 2001 году с выходом Mac OS X 10.0 Cheetah.
С момента появления Quartz 2D постоянно развивался. В Mac OS X 10.2 Jaguar была добавлена поддержка Quartz Extreme — аппаратного ускорения композитинга. В Mac OS X 10.4 Tiger появилась поддержка Core Image и Core Video, которые расширили возможности обработки изображений. В iOS 2.0 (2008 год) Quartz 2D был портирован на мобильные устройства, где используется для отрисовки интерфейса и графики в приложениях. В macOS 10.13 High Sierra (2017) была внедрена поддержка Metal — низкоуровневого API для работы с графическим процессором, что позволило Quartz 2D использовать аппаратное ускорение для некоторых операций.
Архитектура
Quartz 2D является частью фреймворка Core Graphics, который, в свою очередь, входит в состав Core Services. Основные компоненты архитектуры:
Графический контекст (CGContext)
Графический контекст — это объект, представляющий поверхность для рисования. Он определяет параметры вывода (цвет, прозрачность, трансформации) и содержит текущее состояние графического конвейера. Контекст может быть связан с экраном (CGContext для окна или представления), растровым изображением (CGBitmapContext), PDF-файлом (CGPDFContext) или принтером.
Координатная система
Quartz 2D использует декартову систему координат, где ось X направлена вправо, а ось Y — вверх. Начало координат (0,0) по умолчанию находится в левом нижнем углу контекста. Для iOS и macOS применяются разные системы координат: в iOS ось Y направлена вниз, что требует трансформации контекста при отрисовке.
Графический конвейер
Отрисовка в Quartz 2D проходит через несколько этапов:
- Определение пути — создание последовательности линий, кривых и дуг.
- Обводка и заливка — нанесение цвета, градиента или шаблона на путь.
- Композитинг — смешивание пикселей с учётом прозрачности (альфа-канала).
- Растеризация — преобразование векторных данных в пиксели.
- Вывод — передача результата на устройство отображения.
Основные возможности
Векторная графика
Quartz 2D поддерживает создание и отрисовку векторных фигур: линий, прямоугольников, эллипсов, дуг и кривых Безье. Пути могут быть замкнутыми или разомкнутыми. Для построения кривых используются квадратичные и кубические кривые Безье.
Растровые изображения
Движок может загружать, отображать и манипулировать растровыми изображениями в форматах PNG, JPEG, TIFF, GIF и других. Поддерживается масштабирование, поворот, обрезка, наложение фильтров (через Core Image) и управление цветовыми профилями.
Текст
Quartz 2D использует Core Text для рендеринга текста. Поддерживаются шрифты TrueType, OpenType и PostScript Type 1. Текст может быть отображён в любом направлении, с трансформациями и наложением на произвольные пути.
Управление цветом
Встроенная система управления цветом (ColorSync) позволяет работать с различными цветовыми пространствами: sRGB, Adobe RGB, Display P3 и другими. Quartz 2D автоматически преобразует цвета между пространствами при выводе на экран или печать.
PDF-рендеринг
Quartz 2D может отображать PDF-документы, извлекать из них страницы, текст и изображения. Поддерживается создание PDF-файлов из любого графического контекста.
Применение
Разработка приложений для macOS и iOS
Quartz 2D используется для создания пользовательских интерфейсов, отрисовки графиков, диаграмм, игр и других визуальных элементов. В iOS он является основным способом рендеринга для UIView и CALayer.
Печать
Движок обеспечивает высококачественный вывод на принтеры, поддерживая PostScript и PDF. Печать может быть выполнена как из приложений, так и из системных диалогов.
Обработка изображений
Quartz 2D применяется в графических редакторах (например, Pixelmator, Affinity Photo) для фильтрации, коррекции цвета и композитинга.
Научная и инженерная графика
Благодаря точности векторной графики, Quartz 2D используется в CAD-системах, программах для моделирования и визуализации данных.
Примеры использования
Отрисовка простой фигуры
``objc CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); CGContextFillRect(context, CGRectMake(10, 10, 100, 100)); ``
Создание PDF-файла
``objc NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString pdfPath = [[paths firstObject] stringByAppendingPathComponent:@"output.pdf"]; UIGraphicsBeginPDFContextToFile(pdfPath, CGRectZero, nil); UIGraphicsBeginPDFPage(); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); CGContextFillRect(context, CGRectMake(50, 50, 200, 200)); UIGraphicsEndPDFContext(); ``
Сравнение с другими технологиями
| Технология | Платформа | Тип графики | Аппаратное ускорение |
|---|---|---|---|
| Quartz 2D | macOS, iOS | Векторная, растровая | Частичное (через Metal) |
| Direct2D | Windows | Векторная, растровая | Полное (через DirectX) |
| Cairo | Кроссплатформенная | Векторная, растровая | Частичное (через OpenGL) |
| Skia | Кроссплатформенная | Векторная, растровая | Полное (через Vulkan, Metal, OpenGL) |
Quartz 2D уступает Direct2D и Skia в производительности на сложных сценах, но обеспечивает более точную цветопередачу и интеграцию с PDF.
Критика
Основные претензии к Quartz 2D:
- Производительность — при отрисовке большого количества объектов или сложных путей скорость может быть ниже, чем у конкурирующих технологий.
- Ограниченность — отсутствие встроенной поддержки 3D-графики, что требует использования OpenGL или Metal.
- Зависимость от платформы — технология доступна только в экосистеме Apple, что ограничивает её применение в кроссплатформенных проектах.
Интересные факты
- Quartz 2D использует модель композитинга, основанную на PDF 1.4, что позволяет легко экспортировать графику в этот формат.
- В macOS Quartz 2D работает поверх Quartz Extreme — системы композитинга окон, которая объединяет все окна в единое изображение.
- Название «Quartz» происходит от минерала кварца, что символизирует прозрачность и чистоту графики.
Источники
- Apple Inc. «Core Graphics Programming Guide» (2013).
- Apple Inc. «Quartz 2D Programming Guide» (2015).
- Apple Inc. «macOS Technology Overview» (2020).
- Apple Inc. «iOS Graphics and Animation» (2021).
- Техническая документация Apple Developer (developer.apple.com).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →