将NSColor转换为RGB

Wes*_*ley 5 cocoa objective-c nscolor

我正在尝试将NSColor转换为RGB,但它似乎给出了一个完全不正确的结果:

NSColor *testColor = [NSColor colorWithCalibratedWhite:0.65 alpha:1.0];

const CGFloat* components = CGColorGetComponents(testColor.CGColor);
NSLog(@"Red: %f", components[0]);
NSLog(@"Green: %f", components[1]);
NSLog(@"Blue: %f", components[2]);
NSLog(@"Alpha: %f", CGColorGetAlpha(testColor.CGColor));
Run Code Online (Sandbox Code Playgroud)

我回来了:红色= 0.65 - 绿色= 1.0 - 蓝色= 0.0而alpha是1.0 - 这导致了完全不同的颜色.(它应该是灰色的,现在它是绿色的).

难道我做错了什么?

Ati*_*ika 7

当我想将选择的颜色转换为十六进制时,我遇到了同样的问题。NSColor 组件值不正确。我设法通过您上面的评论解决了我的问题。

Swift 中的示例:

let colorTest = NSColor.init(calibratedWhite: 0.65, alpha: 1.0)
let color = colorTest.usingColorSpace(NSColorSpace.deviceRGB) ?? colorTest
print(colorTest)
// NSCalibratedWhiteColorSpace 0.65 1
print(colorTest.colorSpace) 
// Generic Gray colorspace
print("red: \(color.redComponent) green:\(color.greenComponent) blue:\(color.blueComponent)") 
// red: 0.708725869655609 green:0.708725869655609 blue:0.708725869655609
Run Code Online (Sandbox Code Playgroud)


dan*_*ith 6

为一个 NSColor * color

CGFloat red = [color redComponent];
CGFloat green = [color greenComponent];
CGFloat blue = [color blueComponent];
Run Code Online (Sandbox Code Playgroud)

  • 我担心这会导致应用程序崩溃,因为初始化的颜色不在RGB颜色空间中. (4认同)

eon*_*ist 6

从NSColor提取RGBA值:(快速3)

let nsColor:NSColor = NSColor.red
let ciColor:CIColor = CIColor(color: nsColor)!
print(ciColor.red)//1.0
print(ciColor.green)//0.0
print(ciColor.blue)//0.0
print(ciColor.alpha)//1.0 /*or use nsColor.alphaComponent*/
Run Code Online (Sandbox Code Playgroud)

注意: NSColor.blackColor()。redComponent将使应用程序崩溃,但是上面的代码不会


Dan*_*n F 5

您需要NSColorSpace首先使用对象将颜色转换为RGB颜色空间,然后您可以使用各种NSColor存取方法获取组件

  • 谢谢你的解决方案是:NSColor*testColor = [[NSColor colorWithCalibratedWhite:0.65 alpha:1.0] colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; (5认同)
  • 这也不起作用,因为颜色不在 RGB 色彩空间中。您必须首先使用“colorUsingColorSpaceName:”对其进行转换。 (2认同)