NSColor |从RGB值创建颜色

时间:2011-02-23 12:00:21

标签: objective-c cocoa macos nscolor

在我的应用程序中,我将RGB值作为无符号字符,因此它不会超过255, 我正在使用NSColor API来创建颜色,并将利用它来绘制字体和背景颜色,

这是我写的功能

+(NSColor *)getColorFromRGB:(unsigned char)r blue:(unsigned char)b green:(unsigned char)g
{
    CGFloat rFloat = r/255.0;
    CGFloat gFloat = g/255.0;
    CGFloat bFloat = b/255.0;

    //  return [NSColor colorWithCalibratedRed:((float)r/255.0) green:((float)g/255.0) blue:((float)b/255.0) alpha:1.0];
    return [NSColor colorWithCalibratedRed:rFloat green:gFloat blue:bFloat alpha:1.0];
}

几乎在所有情况下,当我使用RGB腭中的RGB值比较颜色时,颜色不匹配, 例如,当我通过时,

r = 187, g = 170, b = 170,

它应该画浅灰色,但是我得到完整的颜色,在这种情况下,

任何人都有一个想法,我做错了什么,

亲切的问候

Rohan

3 个答案:

答案 0 :(得分:11)

该代码适合我。尝试调试,您​​是否记得在创建后调用-set颜色?以下是一些有效的示例代码:

static NSColor *colorFromRGB(unsigned char r, unsigned char g, unsigned char b)
{
    return [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0];
}

...

- (void)drawRect:(NSRect)rect {
    NSColor *c = colorFromRGB(50, 100, 255);
    [c set]; // <-- Important
    NSRectFill(rect);
}

答案 1 :(得分:5)

如果要传递255个输入组件,并且为了安全起见想将其限制在255以内,可以试试这个:

CGFloat rFloat = r%255.0; CGFloat gFloat = g%255.0; CGFloat bFloat = b%255.0;

而不是使用%值。

答案 2 :(得分:2)

Swift 2中的扩展

您可以使用此扩展程序接受来自Photoshop,Sketch等的RGB(0-255)并返回正确的NSColor实例(请注意,某些源代码行比此处显示的更宽):

extension NSColor {

// returns color instance from RGB values (0-255)
static func fromRGB(red: Double, green: Double, blue: Double, alpha: Double = 100.0) -> NSColor {

    let rgbRed = CGFloat(red/255)
    let rgbGreen = CGFloat(green/255)
    let rgbBlue = CGFloat(blue/255)
    let rgbAlpha = CGFloat(alpha/100)

    let color = NSColor(red: rgbRed, green: rgbGreen, blue: rgbBlue, alpha: rgbAlpha)
    return color
}

}

使用示例:

let myColor = NSColor.fromRGB(140, green: 150, blue: 155)
let mySemiTranspColor = NSColor.fromRGB(140, green: 150, blue: 155, alpha: 50)