Проблема с NSColors в cocoa

#objective-c

#objective-c

Вопрос:

я пытаюсь составить цвета, используя NSColor, и когда я пытаюсь создать цвет RGB со следующими значениями, вместо этого просто отображаются белые цвета:

 (r,g,b):(50,50,50)
(r,g,b):(100,100,100)
(r,g,b):(150,150,150)
(r,g,b):(200,200,200)
  

и т.д…

код, используемый для создания цветов, является:

// код для создания простых изображений с фоновыми цветами

 NSColor * myColor = [NSColor colorWithDeviceRed:100.0 green:100.0 blue:100.0 alpha:1.0];
NSImage* image1 = [[NSImage alloc] initWithSize:NSMakeSize(10.0,  100.0)];
NSRect imageBounds1 = NSMakeRect (0, 0, 10, 100);

[image1 lockFocus];
[myColor set];
NSRectFill (imageBounds1);
[image1 unlockFocus];
  

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

Заранее спасибо..

Ответ №1:

Если я правильно помню, вам также понадобится диапазон 0-1 в качестве вашего RGB

Ответ №2:

Компоненты NSColor имеют значения в [0 .. 1], поэтому вам следует нормализовать имеющиеся у вас значения, например:

 NSColor * myColor = [NSColor colorWithDeviceRed:100.0/255 green:100.0/255 blue:100.0/255 alpha:1.0];
  

Если вы попытаетесь задать цветовым компонентам значения больше 1, то они будут интерпретироваться как 1, так что ваш код будет фактически эквивалентен

 NSColor * myColor = [NSColor colorWithDeviceRed:1.0 green:1.0 blue:1.0 alpha:1.0];
  

Которое создает белый цвет.

Ответ №3:

Как указано в документации:

Значения ниже 0.0 интерпретируются как 0.0, а значения выше 1.0 интерпретируются как 1.0

Это означает, что ваши значения (100,100,100) будут преобразованы в (1.0, 1.0, 1.0), который является белым. Что вам нужно сделать, это преобразовать значение каждого канала, используя следующее уравнение:

100 : 255 = x : 1.0 => x = 100/255

где x — это значение, которое вы будете использовать для метода

 -(NSColor*)colorWithDeviceRed:CGFloat red green:CGFloat green blue:CGFloat blue alpha:CGFloat alpha];
  

У вас должно быть что-то подобное в вашем коде

 [NSColor colorWithDeviceRed:100.0/255.0 green:100.0/255.0 blue:100.0/255.0 alpha:1.0];