Цвет и прозрачность

Один из ключей к созданию интересной графики является эффективным использованием цвета и прозрачности. В OS X оба используются, чтобы передать информацию и обеспечить свойственное обращение к Вашим созданиям. Хорошее цветное использование обычно приводит к интерфейсу, который приятен пользователю и помогает вызвать информацию, когда это необходимо.

О цвете и прозрачности

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

Для более полного объяснения цвета цветная теория и управление цветом в OS X, видят Темы Программирования Обзора и Цвета управления цветом.

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

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

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

Цветовое пространство является практической адаптацией цветовой модели. Это указывает палитру (или диапазон) цветов, которые могут быть произведены с помощью определенной цветовой модели. В то время как цветовая модель решает, что отношение между значениями в каждой размерности, цветовое пространство определяет абсолютное значение тех значений как цвета. Какао поддерживает те же цветовые пространства как 2D Кварц, несмотря на то, что методы доступа NSColor внимание на следующие цветовые пространства:

  • RGB

  • CMYK

  • Серый

В какао, NSColorSpace класс обрабатывает информацию, связанную с определенным цветовым пространством. Можно создать экземпляры этого класса для представления пробелов отдельного цвета. Какао обеспечивает методы для получения объектов цветового пространства, представляющих пробелы стандартного цвета. Можно также создать объекты пространства пользовательского цвета с помощью ссылки профиля ColorSync или данных профиля International Color Consortium (ICC).

Для получения дальнейшей информации о цветовых пространствах и цветовых моделях в OS X, см. Обзор управления цветом.

Цветовые объекты

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

Поскольку цветовой объект должен представлять единственное цветовое пространство, Вы не можете использовать все методы NSColor от того же объекта. Для данного цветового объекта можно использовать только методы, относящиеся для, раскрашивает цветовое пространство того объекта. Например, при создании основанного на CMYK цветового объекта Вы не можете использовать getRed:green:blue:alpha: метод для получения значений RGB. Методы, неподдерживающиеся в пространстве текущего цвета, повышают исключение.

Для получения дополнительной информации о том, как создать и использовать цвета, видит Цвета Создания.

Значения компонента цвета

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

Можно получить значения компонентов цветового объекта с помощью любого из нескольких методов в NSColor. Несколько методов существуют для получения значений цвета известных цветовых пространств, таких как RGB, CMYK, HSV (также известный как HSB), и серый. Если Вы не знаете число компонентов в цветовом пространстве цвета, можно использовать numberOfComponents метод для обнаружения. Можно тогда использовать getComponents: метод для получения значений компонентов.

Прозрачность

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

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

Как компоненты цвета, альфа-компонент указан как значение с плавающей точкой в диапазоне 0.0 к 1,0. Можно думать об альфа-компоненте как об указании количества света, отражаемого назад от поверхности объекта. Альфа-значение 1,0 представляет 100%-е отражение всего света и эквивалентно объекту, являющемуся непрозрачным. Альфа-значение 0,0 представляет 0%-е отражение света и всего цвета, прибывающего из содержания внизу. Альфа-значение 0,5 представляет 50%-е отражение с половиной цвета, отражаемого от объекта и наполовину прибывающего из содержания внизу.

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

Цвета образца

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

  Получение рисунка 4-1 с образцом
Drawing with a pattern

Для получения информации о том, как создать цвета образца, посмотрите Цвета Создания.

Списки цветов

Список цветов является подобным словарю объектом (реализованный NSColorList класс), который содержит упорядоченный список NSColor объекты, идентифицированные ключами. Можно получить цвета от списка цветов ключом. Можно также организовать цвета путем размещения их в определенных индексах в списке.

Списки цветов доступны как инструмент, чтобы помочь Вам управлять любыми специфичными для документа цветами. Они также используются для настройки списка цветов, выведенных на экран в цветной панели. Можно использовать attachColorList: метод NSColorPanel для добавления любых цветов приложение использует для панели.

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

Согласование цветов

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

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

Для получения информации о ColorSync посмотрите менеджера ColorSync Референса. Для получения информации о профилях ICC посмотрите Международный Цветной Консорциальный веб-сайт: http://www .color.org/.

Создание цветов

NSColor класс поддерживает создание нескольких различных типов цветовых объектов:

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

В OS X v10.5 и позже, Какао предоставляет поддержку для узоров заливки градиента через NSGradient класс. До версии 10.5, если Вы хотите использовать градиент, чтобы заполнить или перечеркнуть путь, необходимо использовать Кварц вместо этого. Для примеров того, как создать и использовать градиенты, посмотрите Заливки Градиента Создания.

Работа с цветами

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

Применение цветов к нарисованному содержанию

Цвета обводки и цвета заливки изменяют появление находящихся на пути форм, таких как нарисованные с NSBezierPath класс или функции такой как NSRectFill. Цвет обводки применяется к самому пути, и цвет заливки применяется к области, ограниченной тем путем.

Для установки текущего штриха или атрибутов заливки Вы используете один из NSColor методы перечислены в Таблице 4-1.

Табличные 4-1  Методы для изменения атрибутов цвета

Метод NSColor

Описание

set

Наборы и цвет обводки и цвет заливки к тому же значению.

setFill

Устанавливает цвет заливки.

setStroke

Выбирает цвет обводки.

Например, следующие кодовые наборы цвет обводки к черному цвету и цвет заливки к цвету фона для средств управления.

[[NSColor blackColor] setStroke];
[[NSColor controlBackgroundColor] setFill];

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

Применение цвета к тексту

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

Применять цвет к диапазону символов в NSAttributedString объект, Вы применяетесь NSForegroundColorAttributeName припишите символам. Этот атрибут берет соответствие NSColor возразите как его значение.

Применять цвет к символам NSString объект, Вы применяетесь NSForegroundColorAttributeName припишите, как Вы были бы для NSAttributedString объект. Различие в приложении - то, что атрибуты применились к NSString возразите влияют на всю строку и не указанный диапазон символов.

Набор доступных атрибутов для обоих строковых типов перечислен в Дополнительной Ссылке Набора Приложения NSAttributedString в Ссылке Платформы AppKit. Для примера того, как изменить атрибуты приписанной строки, посмотрите Изменение Приписанной Строки в Приписанном Строковом Руководстве по программированию. Для получения дополнительной информации о рисовании текста, см. текст.

Получение компонентов цвета

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

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

Выбор цветов

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

Для получения информации о том, как использовать цветные скважины и цветную панель в Вашем приложении, посмотрите, что Цвет Программирует Темы.

Работа с цветовыми пространствами

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

Преобразование между цветовыми пространствами

Можно преобразовать между цветовыми пространствами с помощью colorUsingColorSpaceName: метод NSColor. Этот метод создает новый цветовой объект, представляющий тот же цвет, но использующий цветовое пространство Вы указываете. Для преобразования цвета от RGB до CMYK Вы могли использовать код, подобный следующему:

NSColor* rgbColor = [NSColor colorWithCalibratedRed:1.0 green: 0.5  blue: 0.5  alpha:0.75];
 
NSColor* cmykColor = [rgbColor colorUsingColorSpace:[NSColorSpace  genericCMYKColorSpace]];

Отображение физических цветов к цветовому пространству

Диапазон цветов (или палитра), который может быть физически выведен на экран на устройстве вывода, отличается с устройства на устройство. Во время рендеринга Какао пытается соответствовать цвета, которые Вы указываете в своем коде так близко, как это может к цветам, доступным в целевом устройстве. Иногда, тем не менее, это отображает цвета по-другому, чтобы подчеркнуть различные аспекты цвета, который мог бы быть более важным при репродуцировании того цвета. Отображение, используемое для цветов, упоминается как намерение рендеринга, и это - что-то, что большинство разработчиков редко должно изменять.

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

Табличные 4-2  Кварцевые намерения рендеринга

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

Описание

kCGRenderingIntentDefault

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

kCGRenderingIntentAbsoluteColorimetric

Это намерение рендеринга не выполняет корректировки белой точки цветов. Цвет, который, кажется, является белым на отображении на экране, может быть воспроизведен на печатном носителе как синеватый цвет (потому что белый цвет на экране фактически имеет синеватый бросок). Это намерение полезно для моделирования одного устройства на другом или для рендеринга логотипов, где точное цветное воспроизведение важно.

kCGRenderingIntentRelativeColorimetric

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

kCGRenderingIntentPerceptual

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

kCGRenderingIntentSaturation

Это намерение рендеринга пытается максимизировать насыщенность цветов. Это намерение главным образом используется для бизнес-диаграмм или графики.

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

- (void) drawRect:(NSRect)rect
{
    CGContextRef theCG = [[NSGraphicsContext currentContext] graphicsPort];
 
    // Change the rendering intent.
    CGContextSetRenderingIntent(theCG, kCGRenderingIntentPerceptual);
 
    // Draw your content.
}