Czy istnieje sposób dotykowy Cocoa Touch do zamiany kolorów z jednej przestrzeni kolorów na drugą?Jak przekonwertować kolory z jednej przestrzeni kolorów na drugą?
Pod koniec tego kodu:
UIColor *grey = [UIColor colorWithWhite: 0.5 alpha: 1.0];
CGColorRef greyRef = [grey CGColor];
int x = CGColorGetNumberOfComponents(greyRef);
... x
jest 2.
Powodem muszę to staram się kopiować kolory na liście składników koloru dla CGGradientCreateWithColorComponents
, który potrzebuje wszystkich kolorów w jednej przestrzeni kolorów. Problem polega na tym, że kolor szary znajduje się w przestrzeni kolorów w skali szarości, a nie w kolorze RGB. (Nazwa ucieczki mnie 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ę spojrzeć na kolory w przestrzeni kolorów szarości i konwertować je. Ale to rozwiązuje tylko jeden przypadek. Patrząc na at this question, myślę, że HSB również jest obsługiwany. Ale chciałbym tutaj napisać jakiś kod i nigdy więcej o tym nie myśleć, co oznacza wspieranie nie tylko przestrzeni kolorów, które teraz istnieją, ale wszystkiego, co Apple mogłoby dodać w przyszłości. Czy mam pecha?
To całkiem niezła odpowiedź, choć warto wspomnieć, że kolory HSB są umieszczane w przestrzeni kolorów RGB. Tak więc, jest to całkowicie poprawne nazywanie 'getRed: green: blue: alpha:' na nich. –
Hmm, nie ma "kCGColorSpaceModelHSB":/ – damian
Nie. Są mapowani do przestrzeni RGB; użyj dla nich metody RGB. Z dokumentów dla 'colorWithHue: saturation: brightness: alpha:' ** Informacje o kolorach reprezentowane przez [zwrócony] obiekt znajduje się w przestrzeni kolorów urządzenia RGB. ** –