Как преобразовать цвета из одного цветового пространства в другое?

Есть ли способ Cocoa Touch для преобразования цветов из одного цветового пространства в другое?

В конце этого кода:

UIColor *grey = [UIColor colorWithWhite: 0.5 alpha: 1.0];
CGColorRef greyRef = [grey CGColor];
int x = CGColorGetNumberOfComponents(greyRef);

...x это 2.

Причина, по которой мне это нужно, заключается в том, что я пытаюсь скопировать цвета в список цветовых компонентов дляCGGradientCreateWithColorComponents, которому нужны все цвета в одном цветовом пространстве. Проблема в том, что серый цвет находится в цветовом пространстве градаций серого, а не в RGB. (Имя ускользает от меня на данный момент, но это не важно.)

CGGradientRef createGradient(NSInteger inCount, NSArray* inColors, CGFloat* inLocations) {
 CGColorSpaceRef theColorspace = CGColorSpaceCreateDeviceRGB( );
 size_t numberOfComponents = 4;
 NSInteger colorSize = numberOfComponents * sizeof( CGFloat );
 CGFloat *theComponents = malloc( inCount * colorSize );
 CGFloat *temp = theComponents;
 for ( NSInteger i = 0; i < inCount; i++ ) {
  UIColor *theColor = [inColors objectAtIndex: i];
  CGColorRef cgColor = [theColor CGColor];
  const CGFloat *components = CGColorGetComponents( cgColor );
  memmove( temp, components, colorSize );
  temp += numberOfComponents;
 }
 CGGradientRef gradient = CGGradientCreateWithColorComponents( theColorspace,
                                               theComponents, inLocations, inCount );
 CGColorSpaceRelease( theColorspace );
 free( theComponents );
 return gradient;
}

Я знаю, что могу искать цвета в цветовом пространстве серого и преобразовывать их. Но это решает только один случай. От глядяна этот вопросЯ думаю, что HSB также обрабатывается. Но я хотел бы написать здесь некоторый код и больше никогда не думать об этом, что означает поддержку не только цветовых пространств, которые существуют сейчас, но и всего, что Apple могла бы добавить в будущем. Мне не повезло?

Ответы на вопрос(4)

Ваш ответ на вопрос