Что возвращает CGColorGetComponents ()? - PullRequest
7 голосов
/ 27 апреля 2009
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

Возвращает ли это число с плавающей точкой или массив с плавающей точкой? Похоже, звездочка является сокращением для создания массива. Это правильно?

Когда я вызываю эту функцию для свойства CGColor объекта HSB UIColor, она преобразует значения в RGB?

Ответы [ 5 ]

5 голосов
/ 27 апреля 2009
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);

Возвращает ли это число с плавающей точкой или массив с плавающей точкой? Похоже, звездочка является сокращением для создания массива. Это правильно?

Сортировка.

CGFloat *colors объявляет переменную, содержащую указатель как минимум на один CGFloat. CGColorGetComponents возвращает указатель на несколько CGFloats, один за другим - массив C. Вы берете этот указатель и назначаете его (вставляете указатель) в переменную colors.

Объявление переменной не создает массив. На самом деле, ни один не делает CGColorGetComponents. Все, что создало объект CGColor, создало массив и сохранило его внутри объекта; CGColorGetComponents позволяет вам иметь указатель на это хранилище.

Объявление переменной CGFloat *colors создает только место - переменную - для хранения указателя на один или несколько CGFloats. В переменной есть указатель, а в этом указателе - массив.

Если это все еще неясно, см. Все, что вам нужно знать об указателях в C .

4 голосов
/ 27 апреля 2009

Да, он возвращает массив CGFloats. В частности, он возвращает «массив значений интенсивности для компонентов цвета (включая альфа-канал), связанных с указанным цветом».

Возвращаемые цветовые компоненты зависят от того, какое цветовое пространство использует переданный CGColorRef.

Дополнительную информацию можно найти в документации CGColor .

1 голос
/ 27 апреля 2009

С Apple :

Возвращает значения цветовых компонентов (включая альфа), связанных с кварцевым цветом. Массив значений интенсивности для цветовых компонентов (включая альфа), связанных с указанный цвет. Размер массива на единицу больше, чем количество компонентов цветового пространства для цвета.

0 голосов
/ 11 мая 2017

Вот пример того, как вы можете правильно преобразовать CGColorRef myColorRef в NSColor myNSColor:

NSColorSpace *cp = [[NSColorSpace alloc] initWithCGColorSpace:CGColorGetColorSpace(myColorRef)];
const CGFloat *components = CGColorGetComponents(myColorRef);
size_t componentCount = CGColorGetNumberOfComponents(myColorRef);
NSColor* myNSColor = [NSColor colorWithColorSpace:cp components:components count:componentCount];
0 голосов
/ 01 февраля 2017

Для получения компонентов RGB я использую:

// Get UIColor's RGB normalized components (0..1)
CGFloat red, green, blue, alpha;
[color getRed:&red green:&green blue:&blue alpha:&alpha];

// Convert RGB components to 8-bit values (0..255)
int r = (int)(red * 255.0);
int g = (int)(green * 255.0);
int b = (int)(blue * 255.0);
...