Gibt es einen Cocoa Touch-Weg, um Farben von einem Farbraum in einen anderen zu konvertieren?Wie konvertiert man 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 brauche das ist Ich versuche Farben auf eine Liste von Farbkomponenten für CGGradientCreateWithColorComponents
zu kopieren , die alle Farben in einem einzigen Farbraum benötigt. Das Problem besteht darin, dass Grau im Graustufenfarbraum liegt und nicht im RGB-Farbraum. (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 für Farben in der Graustufen-Farbraum aussehen kann und sie konvertieren. Aber das löst nur einen Fall. Von der Suche at this question denke ich, dass HSB auch gehandhabt wird. Aber ich würde hier gerne etwas Code schreiben und nie wieder darüber nachdenken, was bedeutet, dass ich nicht nur die Farbräume unterstütze, die es jetzt gibt, sondern alles, was Apple in Zukunft vielleicht hinzufügen könnte. Habe ich kein Glück?
Dies ist eine ziemlich gute Antwort, obwohl Sie vielleicht erwähnen möchten, dass HSB-Farben in den RGB-Farbraum gelegt werden. Daher ist es absolut richtig, 'getRed: grün: blau: alpha:' auf ihnen zu nennen. –
Hmm, da scheint kein 'kCGColorSpaceModelHSB' zu sein:/ – damian
Nein. Sie werden dem RGB-Raum zugeordnet; Verwenden Sie die RGB-Methode für sie. Aus der Dokumentation für 'colorWithHue: saturation: Helligkeit: alpha:' ** Die Farbinformation von [dem zurückgegebenen] Objekt ist im RGB-Farbraum des Geräts. ** –