Открыть сервис

Core Graphics

Core Graphics (также известный как Quartz 2D) — это программный интерфейс (API) для двумерной (2D) векторной и растровой графики, входящий в состав операционных систем Apple (macOS, iOS, iPadOS, tvOS, watchOS). Он является частью фреймворка Quartz и предоставляет низкоуровневые средства для отрисовки графических примитивов, работы с изображениями, цветом, шрифтами и преобразованиями координат. Core Graphics лежит в основе визуального рендеринга многих приложений Apple, включая системные интерфейсы и сторонние программы, написанные на Objective-C, Swift или C.

История

Core Graphics был разработан компанией Apple в конце 1990-х — начале 2000-х годов как часть перехода к операционной системе macOS (тогда Mac OS X). Его предшественником был QuickDraw — классический 2D-графический API для классической Mac OS, который использовал растровую модель и был ориентирован на аппаратные возможности процессоров Motorola 68k. С появлением Mac OS X (2001 год) Apple внедрила Quartz — новую графическую архитектуру, основанную на модели отображения с использованием PDF (Portable Document Format). Core Graphics стал ядром этой архитектуры, обеспечивая рендеринг векторных и растровых элементов.

В 2007 году с выходом первой версии iOS (тогда iPhone OS) Core Graphics был портирован на мобильные устройства, став основным API для 2D-графики в iOS. В последующих версиях iOS и macOS API расширялся: добавлялись новые типы контекстов, улучшалась поддержка цветовых пространств (например, широкий цветовой охват Display P3 в iOS 10 и macOS Sierra 2016 года), а также интеграция с аппаратным ускорением через Metal.

Архитектура и основные компоненты

Core Graphics работает на уровне C-функций, что обеспечивает высокую производительность и совместимость с языками C, C++, Objective-C и Swift (через мосты). API не является объектно-ориентированным в традиционном смысле — он использует непрозрачные типы данных (opaque types), такие как CGContextRef, CGPathRef, CGImageRef, CGColorRef, CGFontRef и другие.

Контекст рисования

Центральным элементом Core Graphics является контекст рисования (CGContextRef). Контекст представляет собой виртуальное полотно, на которое выполняются все графические операции. Он определяет:

Стандартный способ получения контекста — вызов функции UIGraphicsGetCurrentContext() (в UIKit) или создание контекста для конкретного вывода (например, CGBitmapContextCreate для растрового изображения).

Графические примитивы

Core Graphics поддерживает рисование следующих примитивов:

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

Цвет в Core Graphics задаётся через CGColorRef и CGColorSpaceRef. Поддерживаются цветовые пространства:

Преобразования координат

Core Graphics использует аффинные преобразования (CGAffineTransform), которые позволяют изменять положение, масштаб и ориентацию объектов. Преобразования могут быть применены как ко всему контексту, так и к отдельным путям или изображениям. Типичные операции: CGContextTranslateCTM, CGContextScaleCTM, CGContextRotateCTM.

Растровые изображения

Работа с растровыми изображениями осуществляется через CGImageRef. Core Graphics поддерживает:

Для создания растрового контекста используется CGBitmapContextCreate, который принимает параметры: размер, количество бит на компонент, количество компонентов, порядок байтов и цветовое пространство.

Применение

Core Graphics широко применяется в разработке приложений для платформ Apple:

Отрисовка пользовательских интерфейсов

В iOS и macOS разработчики используют Core Graphics для создания кастомных элементов интерфейса: кнопок, индикаторов прогресса, фонов, анимаций. Например, метод drawRect: в UIView (iOS) или draw(_:) в NSView (macOS) позволяет переопределить отрисовку с помощью Core Graphics.

Работа с PDF

Core Graphics включает функции для создания и чтения PDF-документов (CGPDFDocumentRef, CGPDFPageRef). Это позволяет приложениям генерировать PDF-файлы из графических элементов или отображать страницы PDF на экране.

Обработка изображений

API используется для манипуляции растровыми изображениями: изменение размера, наложение фильтров (через Core Image), объединение нескольких изображений, извлечение цветовых каналов.

Графика для игр и визуализаций

Хотя для сложной 3D-графики и игр обычно используется Metal или OpenGL, Core Graphics применяется для 2D-интерфейсов, спрайтов и простых анимаций в играх, написанных на SpriteKit или SceneKit.

Печать

Core Graphics поддерживает вывод на принтеры через CGContext для печати. Это используется в приложениях для создания отчётов, этикеток и других печатных материалов.

Сравнение с другими API

Core Graphics является низкоуровневым API по сравнению с более высокоуровневыми фреймворками Apple:

Производительность и ограничения

Core Graphics выполняет большую часть работы на CPU, что может быть узким местом при сложной отрисовке (например, тысячи объектов). Для повышения производительности Apple рекомендует:

Ограничения Core Graphics включают отсутствие прямого доступа к GPU (в отличие от Metal) и сложность работы с прозрачностью и смешиванием в некоторых цветовых пространствах.

Пример использования

Ниже приведён упрощённый пример на Swift, демонстрирующий отрисовку красного круга с помощью Core Graphics в контексте UIView:

``swift override func draw(_ rect: CGRect) { guard let context = UIGraphicsGetCurrentContext() else { return } context.setFillColor(UIColor.red.cgColor) context.addEllipse(in: CGRect(x: 50, y: 50, width: 100, height: 100)) context.fillPath() } ``

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →