Причина разницы в том, что цвета, созданные с помощью obj-c, настраиваются так, чтобы учитывать текущий профиль цвета (см. Системные настройки -> Мониторы -> Цвета). Это до сих пор, что один и тот же цвет выглядит по-разному, когда у вас есть несколько мониторов и перетащите запущенное приложение с одного монитора на другой. К сожалению, чрезвычайно сложно использовать точный цвет на определенном мониторе, даже если вы используете colorWithDeviceRed: зеленый: синий: альфа вместо colorWithCalibratedRed: зеленый: синий: альфа.
Восприятие цвета - сложный вопрос, и различные выходные устройства играют важную роль, поэтому неудивительно, что нет картирования 1: 1. Но действительно должно быть возможно создать цвет (скажем, в приложении для рисования или приложении для управления цветом, дизайнерском приложении и т. Д.) И воссоздать тот же самый цвет в Cocoa, если они работают на одном мониторе.
Интересно отметить здесь: когда у вас есть свои цвета в дизайне на OSX (будь то изображение в браузере или PDF-файле или что-то еще) и используйте его значения компонентов в приложении Windows на виртуальной машине (например, в Parallels Desktop), вы можете воспроизводить точный цвет, как показывает любой выбор цвета экрана.
[Update]: Так как настройки профиля системы цвета к родовому один решает цвет, соответствующий это может быть стоит подумать о создании собственного общего цветового пространства в коде, как описано в этом technical Q&A
[Update]: Я просто нашел другое сообщение NSColor, который выглядит, как это то, что мы оба ищем:
NSColor colorWithSRGBRed:green:blue:alpha
В некоторых тестах я мог видеть цвет был точен. К сожалению, это сообщение доступно только на 10.7 и выше.
Что такое 'toHTMLRGB'? Что такое код для 'initWithHTMLString:'? Какой цвет PixelStick говорит? – matt
Кроме того, рассмотрите «устройство» в сравнении с «калиброванными» цветовыми пространствами (см. Руководство по цветовому программированию) в документации). –
@matt toHTMLRGB formrat NSColor to NSString, initWithHTMLString: просто отключите два байта и измените на unsigned int, используя colorWithCalibratedRed: зеленый: синий: альфа: для создания нового объекта NSColor. – teddy