Как создать экземпляры NSColor, которые точно соответствуют экземплярам в макете пользовательского интерфейса Photoshop? - PullRequest
10 голосов
/ 09 января 2009

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

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 09 января 2009

Нет такой вещи, как "чистый" цвет 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 голосов
/ 09 января 2009

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

0 голосов
/ 09 января 2009

Спасибо, я только что попытался создать тестовую 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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...