Question

In my application, i will get RGB Values as a unsigned character so it will not be more then 255, I am using NSColor API to create the color and will make use of it to draw the font and background color,

this is the function that i have written

+(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];
}

In almost all case, when i compare the Color using my RGB Value in RGB palate, color is not matching, For example, when i pass ,

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

It should draw the light gray, but i am getting complete whilte color, in this case,

anyone has an idea, what i am doing wrong,

Kind Regards

Rohan

Was it helpful?

Solution

If you are passing the input components out of 255 and you want to restrict it within 255 for safety purpose, you can try this:

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

Instead of divide use % value.

OTHER TIPS

The code works for me. Try debugging, did you remember to call -set on your color after creating it? Here is some example code that works:

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);
}

Extension in Swift 2

You can use this extension which accepts RGB (0-255) from Photoshop, Sketch, etc. and returns a proper NSColor instance (please mind that some source code lines are wider than displayed here):

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
}

}

Example use:

let myColor = NSColor.fromRGB(140, green: 150, blue: 155)
let mySemiTranspColor = NSColor.fromRGB(140, green: 150, blue: 155, alpha: 50)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top