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?

War es hilfreich?

Lösung

NSColor im iPhone SDK fehlt. Sie können dieses Dienstprogramm verwenden, um von RGB zu HSL Raum zu konvertieren und zurück:

https://github.com/alessani/ColorConverter

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top