在我的应用程序中,我将RGB值作为一个无符号字符,所以它不会超过255,我使用NSColor应用程序接口创建颜色,并使用它来绘制字体和背景颜色。
这是我写的函数
+(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,
它应该绘制浅灰色,但我正在完成颜色,在这种情况下,
有人知道我做错了什么吗,
亲切的问候
罗翰
发布于 2011-02-24 16:37:03
如果您要将输入组件传递到255之外,并且出于安全目的希望将其限制在255以内,您可以尝试这样做:
CGFloat rFloat =r%255.0;CGFloat gFloat =g%255.0;CGFloat bFloat =b%255.0;
使用% value而不是除法。
发布于 2011-02-24 17:34:06
代码对我来说是有效的。试着调试,你有没有记得在创建颜色后对它调用-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);
}发布于 2016-02-17 19:05:15
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)https://stackoverflow.com/questions/5090603
复制相似问题