Слияние других технологий получения

Какао было разработано для интеграции хорошо с другими технологиями в OS X. Много технологий упаковываются как платформы Objective C, который делает включая их в Какао простой. Вы не ограничиваетесь использованием платформ Objective C, все же. Само какао использует Кварц внутренне для реализации большинства подпрограмм получения. Можно использовать Кварц и другие технологии на базе С, такие как OpenGL и QuickTime, от кода с небольшим дополнительным усилием.

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

Используя кварц в Вашем приложении

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

Для получения общей информации о функциях Quartz и как использовать их, посмотрите Кварц 2D Руководство по программированию.

Использование кварцевых функций

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

Некоторые функции Quartz, не поддерживающиеся непосредственно Какао, включают следующее:

  • Уровни

  • Градиенты (также названный штриховками)

  • Источники данных изображения

  • Режимы смешивания (Режимы составления композита использования какао вместо этого)

  • Маскирование изображений

  • Слои прозрачности (для группировки содержания)

  • Произвольные образцы (кроме изображений)

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

Для получения информации о том, как использовать функции Quartz, посмотрите Кварц 2D Руководство по программированию.

Графические преобразования типов

При движении назад и вперед между кодом Какао и Кварца, некоторое преобразование типов данных может быть необходимым. Таблица 9-1 показывает эквиваленты Какао некоторых основных Кварцевых типов.

Табличные 9-1  преобразования Простого типа данных

Тип какао

Кварцевый тип

NSRect

CGRect

NSPoint

CGPoint

NSSize

CGSize

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

NSRect cocoaRect = *(NSRect*)&myCGRect;

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

Таблица 9-2  Эквивалентные типы данных Какао и Кварца

Тип какао

Кварцевый тип

NSGraphicsContext

CGContextRef

NSAffineTransform

CGAffineTransform

NSColor

CGColorRef, CGPatternRef

NSFont

CGFontRef

NSGlyph

CGGlyph

NSImage

CGImageRef

NSBezierPath

CGPathRef

NSShadow

CGSize, CGColorRef

NSGradient (OS X v10.5 и позже)

CGShadingRef

Никакой эквивалент

CGLayerRef

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

  • Создать a CGPathRef объект от NSBezierPath объект, необходимо перерисовать путь с помощью Кварцевых вызовов функции. Используйте elementAtIndex:associatedPoints: метод NSBezierPath получать информацию о точке пути.

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

  • Создать NSImage объект от Кварцевого изображения, необходимо создать объект изображения косвенно. Для получения информации о том, как сделать это, посмотрите Используя Кварцевое Изображение для Создания NSImage.

  • Для создания Кварцевых теней можно использовать методы NSShadow для получения цвета сместите, и значения радиуса размытия до вызова CGContextSetShadow или CGContextSetShadowWithColor.

Получение кварцевого контекста графики

Перед использованием любых функций Quartz необходимо получить Кварцевый контекст графики (CGContextRef) для рисования. Для основанного на представлении получения можно получить контекст путем отправки a graphicsPort обменивайтесь сообщениями к текущему контексту графики Какао (NSGraphicsContext). Этот метод возвращает указатель, который можно бросить к a CGContextRef тип данных и использование в последующих Кварцевых вызовах функции.

Создание контекста графики какао Используя кварц

В OS X v10.4 и позже, если у Вас есть существующий Кварцевый контекст графики, можно создать объект контекста графики Какао с помощью graphicsContextWithGraphicsPort:flipped: метод класса NSGraphicsContext. Вы тогда используете setCurrentContext: метод класса сделать тот контекст текущим контекстом.

Изменение состояния графики

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

Если Вы вносите изменения в состояние графики с помощью NSGraphicsContext класс, Ваши изменения сразу передаются Кварцевому контексту графики, и наоборот. Если Вы не используете NSGraphicsContext для установки атрибута необходимо предположить, что атрибут локален для объекта. Например, NSBezierPath класс предпочитает локальные копии графических атрибутов по значению по умолчанию (или глобальная переменная) атрибуты, сохраненные в текущем контексте.

Используя OpenGL в Вашем приложении

OpenGL является открытым, межплатформенным, трехмерным (3D) графическим стандартом с широкой отраслевой поддержкой. OpenGL упрощает задачу записи 2D или 3D графических приложений в реальном времени путем обеспечения старого, хорошо задокументированного конвейера обработки графики, поддерживающего абстракцию текущих и будущих аппаратных акселераторов.

Следующие разделы обеспечивают, проблеск в методы раньше включал вызовы вовлекающего OpenGL в Ваше приложение Какао. Для больше на поддержке OpenGL в OS X, и для подробных примеров того, как интегрировать OpenGL в Ваше приложение Какао, см. Руководство по программированию OpenGL для Mac. Для получения общей информации о OpenGL, посмотрите Ссылочную Библиотеку> Графика и Отображающий> OpenGL.

Используя NSOpenGLView

Один способ сделать получение OpenGL состоит в том, чтобы добавить представление OpenGL (экземпляр NSOpenGLView) к Вашему окну. Представление OpenGL ведет себя как любое другое представление, но также и хранит указатель на объект контекста графики OpenGL (экземпляр NSOpenGLContext). Хранение графического контекста в представлении избавляет от необходимости Ваш код воссоздавать контекст во время каждого цикла получения, который может быть дорогим.

Для использования представления OpenGL в программе Вы создаете подкласс NSOpenGLView и добавьте что представление к Вашему окну, или программно или использующий Интерфейсного Разработчика. При создании представления OpenGL программно, Вы указываете, что формат пикселя возражает, что Вы хотите связаться с представлением. Объект формата пикселя (экземпляр NSOpenGLPixelFormat) указывает буферы и другие атрибуты рендеринга контекста графики OpenGL. Для получения информации о значении различных атрибутов формата пикселя см. Руководство по программированию OpenGL для Mac.

При использовании Интерфейсного Разработчика для добавления представления к окну, Вы указываете информацию о формате пикселя с помощью инспектора для представления. Интерфейсный Разработчик позволяет Вам указать некоторые пиксельные атрибуты, но не все. Для поддержки других атрибутов необходимо заменить объект формата пикселя представления во время выполнения с помощью setPixelFormat: метод.

Как с другими представлениями, Вы используете свое представление OpenGL drawRect: метод для рисования содержания представления. Когда Ваш drawRect: метод вызывается, среда автоматически сконфигурирована для рисования использования контекста графики OpenGL, связанного с Вашим представлением.

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

Создание контекста графики OpenGL

Прежде, чем создать объект контекста графики OpenGL, Вы сначала создаете объект формата пикселя (NSOpenGLPixelFormat). Атрибуты, которые Вы указываете при создании объекта формата пикселя, определяют поведение рендеринга графического контекста. Как только у Вас есть допустимый объект формата пикселя, можно создать и инициализировать объект контекста графики OpenGL.

Перечисление 9-1 пытается создать контекст графики OpenGL, поддерживающий полноэкранное, 32-разрядное получение с двойной буферизацией. Если желаемое средство рендеринга доступно, оно возвращает контекст; иначе, это возвращается nil.

Перечисление 9-1  , Создающее контекст графики OpenGL

- (NSOpenGLContext*)getMyContext
{
    // Specify the pixel-format attributes.
    NSOpenGLPixelFormatAttribute attrs[] =
    {
        NSOpenGLPFAFullScreen,
        NSOpenGLPFADoubleBuffer,
        NSOpenGLPFADepthSize, 32,
        0
    };
 
    // Create the pixel-format object.
    NSOpenGLContext* myContext = nil;
    NSOpenGLPixelFormat* pixFmt = [[NSOpenGLPixelFormat alloc]
                                     initWithAttributes:attrs];
 
    // If the pixel format is valid, create the OpenGL context.
    if (pixFmt != nil)
    {
        myContext = [[NSOpenGLContext alloc] initWithFormat:pixFmt
                                 shareContext:NO];
    }
 
    [pixFmt release];
    return myContext;
}

Поскольку создание контекстов графики OpenGL зависит от в настоящее время доступных средств рендеринга, Ваш код должен всегда проверять, что требуемые объекты создавались прежде, чем попытаться использовать их. Если создание объекта перестало работать, можно всегда пытаться создать его снова использование различного набора атрибутов.

Используя QuickTime в Вашем приложении

QuickTime является межплатформенной мультимедийной технологией Apple, разработанной, чтобы помочь Вам создать и поставить видео, звук, анимацию, графику, текст, интерактивность и музыку. QuickTime поддерживает десятки форматов файлов и форматов сжатия для изображений, видео и аудио, включая совместимое ISO видео MPEG 4 и аудио AAC.

Можно включить функции QuickTime в приложения Какао одним из двух способов. Самый простой путь через Набор QuickTime, который является базируемой платформой полнофункционального Objective C для интерфейсов QuickTime. Если Вы уже знакомы с интерфейсами QuickTime на базе С, можно использовать тех вместо этого.

Используя набор QuickTime

Платформа Набора QuickTime (QTKit.framework) работы с фильмами в формате QuickTime в приложениях Какао в OS X. Платформа Набора QuickTime была представлена в OS X v10.4 и была разработана как альтернатива и возможная замена для существующего NSMovie и NSMovieView классы в Какао. Эта новая платформа предоставляет больше обширную страховую защиту функций QuickTime и типов данных, чем было предложено классами Набора Приложения. Что еще более важно платформа не требует, чтобы программисты Какао были сведущими в типах данных Углерода, таких как дескрипторы, псевдонимы, спецификации файловой системы, и т.д.

Платформа Набора QuickTime доступна прежде всего в OS X v10.4 и позже, но это также поддерживается в OS X v10.3 с QuickTime 7 или позже установлено. Для получения информации о том, как использовать Набор QuickTime, см. Руководство по программированию Набора QuickTime. Для ссылки классов в Наборе QuickTime см. Ссылку Платформы QTKit.

Используя QuickTime функции на базе С

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

Для введения в QuickTime см. Обзор QuickTime. Для полной ссылки QuickTime посмотрите Ссылку Платформы QuickTime.

Используя кварцевые составы композитора

Если Ваше программное обеспечение работает в OS X v10.4 и позже, можно использовать Кварцевого Композитора для рендеринга сложного графического содержания. Кварцевый Композитор использует последние технологии графики OS X для создания усовершенствованных графических изображений и анимаций быстро и легко. Вы используете Кварцевое приложение Композитора, чтобы создать файлы состава графически и затем загрузить те составы в Ваше приложение Какао и выполнить их. Изменение поведения Вашего приложения Какао тогда так же просто как обновление файла состава.

Кварцевый Композитор особенно подходит для приложений, хотящих выполнить сложные обработки изображения. Через него Вы получаете легкий доступ к функциям Кварца 2D, Базовое Изображение, Базовое Видео, OpenGL, QuickTime, Системные службы MIDI и Real Simple Syndication (RSS). Ваше приложение может представить составы для дисплея или предоставить пользователю средства управления для управления параметрами состава.

Для подробного примера, показывающего Вам, как выполнить состав из Вашего приложения Какао, см., что глава “Использует QCRenderer для Игры Состава” в Кварцевом Руководстве по программированию Композитора.

Выбор правильной технологии формирования изображений

OS X включает несколько различных технологий для управления изображениями. Несмотря на то, что NSImage класс обеспечивает устойчивый набор функций, который достаточен для использования многого разработчика, могут быть определенные времена, когда необходимо использовать другие технологии формирования изображений. Таблица 9-3 перечисляет некоторые из других доступных технологий формирования изображений и когда Вы могли бы использовать каждого из них.

Табличные 9-3  Технологии формирования изображений

Технология изображения

Описание

Кварцевые изображения (CGImageRef)

Кварцевые изображения являются неизменными типами данных, которые Вы используете для управления растровыми данными в Кварце. Несмотря на то, что NSImage проще использовать и предоставляет автоматическую поддержку для независимости разрешения, Вы, возможно, должны были бы создать Кварцевые изображения, если другой API, который Вы используете, ожидает их. Можно создать Кварцевое изображение путем вовлечения a NSBitmapImageRep объект или Кварц побитово отображают контекст и затем извлекающий a CGImageRef оттуда. Кварцевые изображения являются частью платформы Прикладных служб.

Кварцевые уровни (CGLayerRef)

Кварцевые уровни являются непостоянной альтернативой Кварцевым изображениям. Можно нарисовать к уровням во многом как Вы, нарисовал бы к NSImage объект. Вы делаете так путем создания контекста, блокировки внимания на тот контекст, получение и получение объекта изображения от результатов. Поскольку они реализованы в видеопамяти, уровни могут быть очень эффективными для использования, особенно если необходимо неоднократно рисовать то же изображение. Кварцевые уровни доступны в OS X v10.4 и позже как часть платформы Прикладных служб.

Базовое изображение (CIImage)

Базовая платформа Изображения приспособлена к обработке данных изображения. Вы использовали бы эту технологию для применения визуальных эффектов или фильтров к существующим растровым изображениям. Поскольку это явно разработано для управления растровыми изображениями, необходимо преобразовать изображения в a CIImage объект, прежде чем Вы сделаете любую обработку. Базовое Изображение доступно в OS X v10.4 и позже как часть Кварцевой платформы Ядра.

Изображение I/O

Платформа I/O Изображения приспособлена к разработчикам, которым нужно более прямое управление чтением и записью данных изображения. Вы могли бы использовать эту платформу для преобразования изображений от одного формата до другого, или Вы могли бы использовать его для добавления метаданных к изображению, создаваемому программой. Функции Изображения I/O доступны в OS X v10.4 и позже как часть платформы Прикладных служб.

Базовая анимация

В то время как не явно технология формирования изображений, Базовая платформа Анимации является умным и эффективным способом представить изображения и другие данные в представлении. Платформа обеспечивает кэшируемое запоминающее устройство, позволяющее сделать анимации с минимальной суммой перерисовки. Вы могли бы использовать эту технологию вместо NSImage или другие технологии формирования изображений для создания эффектов анимации или другой быстро изменяющейся графики. Это предлагает респектабельную производительность анимации, не требуя, чтобы Вы использовали низкоуровневый APIs, такой как OpenGL. Базовая платформа Анимации доступна в OS X v10.5 и позже как часть Кварцевой платформы Ядра.