Ami*_*k12 7 macos cocoa objective-c 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];
}
Run Code Online (Sandbox Code Playgroud)
几乎在所有情况下,当我使用我的RGB值在RGB上腭比较颜色时,颜色不匹配,例如,当我通过时,
r = 187,g = 170,b = 170,
它应该画浅灰色,但我得到完整的颜色,在这种情况下,
任何人都有一个想法,我做错了什么,
亲切的问候
罗汉
Die*_*Epp 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);
}
Run Code Online (Sandbox Code Playgroud)
如果要传递255个输入组件,并且为了安全起见要将其限制在255以内,可以尝试这样做:
CGFloat rFloat = r%255.0; CGFloat gFloat = g%255.0; CGFloat bFloat = b%255.0;
而不是划分使用%值.