NSColor | Создание цвета из значений RGB - PullRequest
7 голосов
/ 23 февраля 2011

В моем приложении я получу значения 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,

Это должно нарисовать светло-серый, но я получаю полный цвет, в этом случае,

у кого есть идеи, что я делаю не так,

С уважением

Рохан

Ответы [ 3 ]

11 голосов
/ 24 февраля 2011

Код работает для меня.Попробуйте отладку, вы не забыли назвать -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);
}
5 голосов
/ 24 февраля 2011

Если вы пропускаете входные компоненты из 255 и хотите ограничить их в пределах 255 в целях безопасности, вы можете попробовать это:

CGFloat rFloat = r% 255,0; CGFloat gFloat = г% 255,0; CGFloat bFloat = b% 255,0;

Вместо деления используйте значение%.

2 голосов
/ 17 февраля 2016

Удлинитель в Swift 2

Вы можете использовать это расширение, которое принимает RGB (0-255) из Photoshop, Sketch и т. Д. И возвращает правильный экземпляр 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)
...