2013-04-11 3 views
0

Выражает NSColor добавить метод классаNSColor показать разные цвета на экране

+ (NSColor*) initWithHTMLString: (NSString*) rgb 

я установить цвет фона для объекта NSWindow:

[self.window setBackgroundColor:[NSColor initWithHTMLString:@"37854F"]] 
NSLog(@"Color=%@",[self.window.backgroundColor toHTMLRGB]); 

Когда я запускаю программу, журнал линия есть "Color=37854F". Тем не менее, я использую инструмент PixelStick для удаления цветного пикселя, цвет пикселя не 37854F, цветовой компонент немного меньше его происхождения.

Есть ли люди, которые знают решение?

+0

Что такое 'toHTMLRGB'? Что такое код для 'initWithHTMLString:'? Какой цвет PixelStick говорит? – matt

+2

Кроме того, рассмотрите «устройство» в сравнении с «калиброванными» цветовыми пространствами (см. Руководство по цветовому программированию) в документации). –

+0

@matt toHTMLRGB formrat NSColor to NSString, initWithHTMLString: просто отключите два байта и измените на unsigned int, используя colorWithCalibratedRed: зеленый: синий: альфа: для создания нового объекта NSColor. – teddy

ответ

2

Причина разницы в том, что цвета, созданные с помощью 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 и выше.

+0

Ваша информация полезна, но это не мое дело. Мой случай находится на одном мониторе Я использую строку HTML RGB, которую он выбрал из программы Java, и поместил в мою программу Mac OS X. Когда я запускаю два приложения (Java + Mac) на одном мониторе, они разные. – teddy

+0

Это то, что я говорю.Вы создаете цвет в коде Obj-C, и когда он отображается на экране, он не такой же, как у java-программы, откуда вы получили значения компонентов. –

+0

Как сделать NSColor независимым с текущим профилем дисплея? – teddy

0

Это, как вы инициализации в NSColor с точным экраном цвета (Swift 3):

let components = [red, green, blue, alpha] 

let color = NSColor(
    colorSpace: NSScreen.main()!.colorSpace!, 
    components: components, 
    count: 4) 

Если вы цветной выбрать снимок, Вы можете подтвердить, что компоненты RGB точно совпадать.

Смежные вопросы