Подтвердить что ты не робот

Как создать экземпляры NSColor, которые точно совпадают с экземплярами макета Photoshop UI?

Мой дизайнер пользовательского интерфейса дает мне отличные макеты UI, созданные в Photoshop. Я хочу точно соответствовать цветам в макете, но каждый раз, когда я создаю цвет, используя метод -colorWithCalibratedRed:green:blue:alpha: NSColor, цвета не совпадают.

Я попробовал выборку цветов из макета Photoshop с помощью приложения Pixie в /Developer/Applications/Graphics Tools/, и он копирует определение NSColor в буфер обмена, но эти цвета неправильны при создании и запуске приложения.

Если я использую значения, которые предоставляет набор выбора цвета Photoshop, они также неверны.

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

Если я использую -colorWithDeviceRed:green:blue:alpha: и передаю значения, они выглядят правильно, но тогда цвет не согласован в других системах.

Есть ли способ сделать это надежно?

4b9b3361

Ответ 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].