Wie konvertiere ich Farben von einem Farbraum in einen anderen?

Gibt es eine Cocoa Touch-Methode zum Konvertieren von Farben von einem Farbraum in einen anderen?

Am Ende dieses Codes:

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

...x ist 2.

Der Grund, warum ich das brauche, ist, dass ich versuche, Farben in eine Liste von Farbkomponenten für zu kopierenCGGradientCreateWithColorComponents, der alle Farben in einem Farbraum benötigt. Das Problem ist, dass Grau im Graustufen-Farbraum und nicht im RGB-Farbraum liegt. (Der Name entgeht mir im Moment, aber es ist nicht wichtig.)

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

Ich weiß, dass ich im Graustufen-Farbraum nach Farben suchen und diese konvertieren kann. Das löst aber nur einen Fall. Vom Schauenbei dieser frageIch denke, HSB wird auch gehandhabt. Aber ich möchte hier etwas Code schreiben und nie wieder darüber nachdenken, was bedeutet, dass nicht nur die Farbräume unterstützt werden, die jetzt vorhanden sind, sondern auch alles, was Apple in Zukunft möglicherweise hinzufügen könnte. Habe ich kein glück

Antworten auf die Frage(4)

Ihre Antwort auf die Frage