可可中NSColors的问题

时间:2011-05-27 08:39:38

标签: 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];

我在网络上找不到任何资源或样本,这为我的上述查询提供了一些帮助。如果有人可以分享他如何实现这一点,我将非常感激。

提前致谢..

3 个答案:

答案 0 :(得分:3)

如果我没记错的话,你也希望范围0-1作为你的RGB

答案 1 :(得分:3)

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];

这会产生白色。

答案 2 :(得分:1)

如文件中所述:

  

低于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];