我正在尝试使用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];
我在网络上找不到任何资源或样本,这为我的上述查询提供了一些帮助。如果有人可以分享他如何实现这一点,我将非常感激。
提前致谢..
答案 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];