Как создать экземпляры NSColor, которые точно совпадают с экземплярами макета Photoshop UI?
Мой дизайнер пользовательского интерфейса дает мне отличные макеты UI, созданные в Photoshop. Я хочу точно соответствовать цветам в макете, но каждый раз, когда я создаю цвет, используя метод -colorWithCalibratedRed:green:blue:alpha:
NSColor, цвета не совпадают.
Я попробовал выборку цветов из макета Photoshop с помощью приложения Pixie в /Developer/Applications/Graphics Tools/, и он копирует определение NSColor в буфер обмена, но эти цвета неправильны при создании и запуске приложения.
Если я использую значения, которые предоставляет набор выбора цвета Photoshop, они также неверны.
Я подозреваю, что это должно быть связано с тем, что я отбираю калиброванный цвет с экрана, поэтому значения неверны, но я не уверен, как обойти это.
Если я использую -colorWithDeviceRed:green:blue:alpha:
и передаю значения, они выглядят правильно, но тогда цвет не согласован в других системах.
Есть ли способ сделать это надежно?
Ответы
Ответ 1
Нет такой вещи, как "чистый" цвет RGB, который будет соответствовать от одного дисплея к другому. Если вы не работаете в стандартизованном цветовом пространстве, цифры, отображаемые для цвета на одном дисплее, вероятно, будут выглядеть несколько иначе на другом.
Попросите вашего дизайнера преобразовать ваши макеты в стандартное цветовое пространство, такое как sRGB. Затем вы можете использовать методы на NSColor, которые принимают не только значения компонентов, но и цветовое пространство, в котором находятся компоненты; это даст вам цвета, которые должны выглядеть одинаково на любом дисплее.
Другими словами, образец цвета, сделанный из (R, G, B) = (1.0, 1.0, 1.0) в Photoshop с использованием sRGB, должен выглядеть практически идентичным рисунку цвета, нарисованному с использованием цвета, который вы получаете следующим образом:
NSColorSpace *sRGB = [NSColorSpace sRGBColorSpace];
CGFloat components[3] = { 1.0, 1.0, 1.0 };
NSColor *sRGBRed = [NSColor colorWithColorSpace:sRGB components:&components count:3];
Обратите внимание, что +[NSColorSpace sRGBColorSpace]
доступен только на Mac OS X 10.5 Leopard и выше. Если вам еще нужно запустить Tiger, вы можете написать небольшое приложение-утилиту, которое работает на 10.5 и преобразует канонические цвета sRGB в откалиброванное пространство RGB:
NSColor *calibratedColor = [sRGBRed colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
Независимо от того, используете ли вы sRGB или откалиброванное пространство, как только у вас есть набор цветов, вы можете поместить их в NSColorList, который вы пишете в файл, а затем загружаете из ресурсов приложения во время выполнения.
Ответ 2
Вы пытались отключить управление цветом в Photoshop? При включенном управлении цветом фактические значения пикселей RGB отображаются, а те, о которых сообщает Photoshop, могут быть не такими.
Ответ 3
Спасибо, я просто попытался создать тестовый PSD с чистыми значениями RGB, и я также создал простое приложение с представлением, которое отображает [NSColor redColor], [NSColor greenColor] и [NSColor blueColor].
Когда я выбираю PSD (открыт в Photoshop или Preview), Pixie показывает мне чистые значения (например, R: 255 G: 0 B: 0 для красного), но когда я пример своего приложения показывает нечистые цвета, например (R: 253 G: 2 B: 30) для [NSColor redColor]. Я получаю тот же результат, если я использую [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0]
вместо [NSColor redColor].