Pregunta

Soy bastante nuevo en Objective C, pero han sido la programación durante un tiempo. Empecé a crear una función que convertir de RGB a HSL y de nuevo pero me da la sensación de que es demasiado largo y se dirigió en la dirección equivocada. ¿Alguien sabe de una manera sencilla de realizar esta conversión?

¿Fue útil?

Solución

NSColor falta en iPhone SDK. Puede utilizar esta utilidad para convertir de RGB a HSL espacio y de vuelta:

https://github.com/alessani/ColorConverter

Otros consejos

Puede utilizar NSColor, creo.

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];

En el segundo pensamiento, no sé si NSColor está disponible en los marcos iPhone o no - no hay un UIColor? De todos modos voy a dejar esta respuesta en caso de que alguien en busca de una solución OS X termina aquí.

Esto es lo que estoy usando:

 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);
    }
}

Y aquí está cómo llamarlo:

CGFloat h, s, l;
RVNColorRGBtoHSL(r, g, b,
                 &h, &s, &l);

Se puede añadir la categoría UIColor-HSVAdditions.h / .m a su aplicación para agregar un conjunto de operaciones a UIColor para trabajar con el tono, saturación y valor. Ver http://bravobug.com/news/?p=448 esta ArsTechnica artículo también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top