2009-12-21 95 views

回答

16

NSColor文档:

NSColor *myColor = [NSColor colorWithCalibratedRed:redValue green:greenValue blue:blueValue alpha:1.0f]; 
+3

您应该使用,而不是1.0 1.0F,1.0是双,这是不是为iPhone本机类型。 – nash 2009-12-21 05:33:05

+0

你是对的 - 快速输入代码的危险! – 2009-12-21 05:34:54

+4

可能值得说明的是,颜色值从0.0到1.0。 此外,“校准”版本确实比使用此方法的正确变体更可能。你想在所有的颜色内部交易中使用NSCalibratedRGBColorSpace(对应于[NSColorSpace genericRGBColorSpace])。只有在输出到已知特定设备时才使用“设备”色彩空间变体。 – Kelan 2009-12-21 07:38:00

3
float red = 0.5f; 
float green = 0.2f; 
float blue = 0.4f; 
float alpha = 0.8f; 

NSColor *rgb = [NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; 
8

另外不要忘记从你的实际RGB值做下面的转换,让我们从Photoshop说...

的RGB (226,226,226)可以被实例化为使用以下值的NSColor:

Red: 226/255 = 0.886... 
Green: 226/255 = 0.886... 
Blue: 226/255 = 0.886... 

[NSColor colorWithDeviceRed:0.886f green:0.886f blue:0.886f alpha:1.0f]; 

为什么255? 8位颜色通道的范围从0到255(含)。标准化时,这将缩放到[0,1](含)范围内。请参阅从标准化值到非标准化值的转换参考,反之亦然。

参考

+2

这可能对其他人很明显,但为什么+1?这是因为256是一个更好的数字,更多的因素,因此更少的舍入误差/小数点? – 2015-09-07 13:51:18

+0

这个答案有点不对。 8位RGB颜色分量值范围从0到255,总共是256个值。因此,映射到0到1范围内的RGB值的正确方法是除以255,即:“red = 226/255”。通过添加尴尬的1并除以256给出非常相似但稍微不正确的结果,可以通过考虑如果颜色分量为0时会发生什么来验证:零除以255仍然是零,但是“(0 + 1)/ 256'> 0. – davidf2281 2016-07-31 10:57:55

-2

扩展斯威夫特2

extension NSObject { 
    func RGB(r:CGFloat, g:CGFloat, b:CGFloat, alpha:CGFloat? = 1) -> NSColor { 
     return NSColor(red: r/255, green: g/255, blue: b/255, alpha: alpha!) 
    } 
} 

然后只需调用

RGB(r: 16, g: 105, b: 125) 

RGB(r: 16, g: 105, b: 125, alpha: 0.5) 
+0

为什么要创建NSObject的扩展名而不是NSColor? – ColdGrub1384 2018-02-20 16:02:26

+0

我更喜欢只写RGB(... – emreoktem 2018-02-20 21:32:05

+0

但是如果你创建NSObject的扩展,你需要调用这样的函数:NSObject()。RGB(_ :, g:,b :)或任何NSObject子类 – ColdGrub1384 2018-02-20 21:39:05