Проблема с NSColors в какао - PullRequest
1 голос
/ 27 мая 2011

Я пытаюсь составить цвета, используя 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];

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

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

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Компоненты 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 голосов
/ 27 мая 2011

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

1 голос
/ 27 мая 2011

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

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

Это означает, что ваши значения (100 10000) будут преобразованы в (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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...