Jak przekonwertować kolory z jednej przestrzeni kolorów na inną?

Czy istnieje sposób Cocoa Touch na konwersję kolorów z jednej przestrzeni kolorów na inną?

Na końcu tego kodu:

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

...x jest 2.

Powodem, dla którego tego potrzebuję, jest próba skopiowania kolorów na listę komponentów kolorowychCGGradientCreateWithColorComponents, który potrzebuje wszystkich kolorów w jednej przestrzeni kolorów. Problem polega na tym, że szary jest w przestrzeni kolorów w skali szarości, a nie w przestrzeni RGB. (Nazwa ucieka mi w tej chwili, ale to nie jest ważne.)

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

Wiem, że mogę szukać kolorów w przestrzeni kolorów w skali szarości i konwertować je. Ale to rozwiązuje tylko jeden przypadek. Od patrzeniana to pytanie, Myślę, że HSB jest również obsługiwane. Ale chciałbym tu napisać jakiś kod i nigdy więcej o tym nie myśleć, co oznacza wspieranie nie tylko przestrzeni kolorów, które są teraz, ale wszystkiego, co Apple mogłoby w przyszłości dodać. Czy mam szczęście?

questionAnswers(4)

yourAnswerToTheQuestion