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?