Ваш код почти полностью правильный, единственная проблема в том, что вы используете числовые значения от 0 до 255 в вашем массиве. Все методы создания NSColor
используют значения CGFloat
от 0 до 1,0.
Все, что вам нужно сделать, это определить массив SRGB
следующим образом:
#define SRGB (CGFloat [4]){184.0/255.0, 184.0/255.0, 184.0/255.0, 1.0}
Ваш код будет работать правильно. Обратите внимание, что при использовании colorWithCalibratedRed:green:blue:alpha:
метода NSColor
не даст вам правильный цвет из ваших значений sRGB.
Чтобы получить правильные значения sRGB, вы должны использовать метод в исходном коде, который специально использует цветовое пространство sRGB для создания цвета. Категория в NSColor
, которая создает цвета с использованием значений sRGB на основе 255, может выглядеть примерно так:
@implementation NSColor (sRGB_Additions)
+ (NSColor *)colorWith255sRGBRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
{
CGFloat sRGBComponents[4] = {red / 255.0, green / 255.0, blue / 255.0, alpha};
NSColorSpace *colorSpace = [NSColorSpace sRGBColorSpace];
return [NSColor colorWithColorSpace:colorSpace components:sRGBComponents count:4];
}
@end
Тогда вы можете просто сделать это:
NSColor* someColor = [NSColor colorWith255sRGBRed:184.0 green:184.0 blue:184.0 alpha:1.0];