Umwandlung von RGB zu HSL mit Objective C
-
26-09-2019 - |
Frage
Ich bin ganz neu in Objective-C, wurde dann aber die Programmierung für eine Weile. Ich begann eine Funktion erstellen, die von RGB zu HSL umwandeln würden und wieder zurück, aber ich bekomme ein Gefühl es viel zu lang ist und in der falschen Richtung. Kennt jemand eine einfache Möglichkeit, diese Konvertierung durchführen?
Lösung
NSColor im iPhone SDK fehlt. Sie können dieses Dienstprogramm verwenden, um von RGB zu HSL Raum zu konvertieren und zurück:
Andere Tipps
Sie NSColor
verwenden können, denke ich.
CGFloat r, g, b, a, h, s, b, a2;
NSColor *c = [NSColor colorWithCalibratedRed:r green:g blue:b alpha:a];
[c getHue:&h saturation:&s brightness:&b alpha:&a2];
Am zweiten Gedanken, ich weiß nicht, ob NSColor
in dem iPhone-Frameworks zur Verfügung steht oder nicht - gibt es keinen UIColor
? Auf jeden Fall werde ich diese Antwort, falls jemand Suche verlassen für eine OS X Lösung endet hier oben.
Hier ist, was ich verwende:
static void RVNColorRGBtoHSL(CGFloat red, CGFloat green, CGFloat blue, CGFloat *hue, CGFloat *saturation, CGFloat *lightness)
{
CGFloat r = red / 255.0f;
CGFloat g = green / 255.0f;
CGFloat b = blue / 255.0f;
CGFloat max = MAX(r, g);
max = MAX(max, b);
CGFloat min = MIN(r, g);
min = MIN(min, b);
CGFloat h;
CGFloat s;
CGFloat l = (max + min) / 2.0f;
if (max == min) {
h = 0.0f;
s = 0.0f;
}
else {
CGFloat d = max - min;
s = l > 0.5f ? d / (2.0f - max - min) : d / (max + min);
if (max == r) {
h = (g - b) / d + (g < b ? 6.0f : 0.0f);
}
else if (max == g) {
h = (b - r) / d + 2.0f;
}
else if (max == b) {
h = (r - g) / d + 4.0f;
}
h /= 6.0f;
}
if (hue) {
*hue = roundf(h * 255.0f);
}
if (saturation) {
*saturation = roundf(s * 255.0f);
}
if (lightness) {
*lightness = roundf(l * 255.0f);
}
}
Und hier ist, wie man es nennen:
CGFloat h, s, l;
RVNColorRGBtoHSL(r, g, b,
&h, &s, &l);
Sie kann die UIColor-HSVAdditions.h / .m Kategorie zu Ihren App hinzufügen, eine Reihe von Operationen zu UIColor hinzufügen, um mit Farbton, Sättigung und Wert zu arbeiten. Siehe http://bravobug.com/news/?p=448 und Dies ArsTechnica auch Artikel.