Pregunta

He echado un vistazo a la clase Colorspace y encontré la constante TYPE_HLS (cual presumiblemente es solo HSL en un orden diferente).

¿Puedo usar esta constante para crear un Color ¿Desde el tono, la saturación y la luminosidad? Si no, ¿hay clases de Java para esto, o necesito escribir las mías?

¿Fue útil?

Otros consejos

La mayoría de las respuestas dadas aquí parecen asumir que HSL == HSB, que es falso. El espacio de colores HSB es útil (y utilizado) en muchos casos, pero hay una excepción notable: CSS. Las funciones de color CSS no RGB, HSL () y HSLA () son HSL, no HSB. Como tal, es muy útil poder convertir hacia y desde HSL en Java.

Hay una buena redacción sobre el problema aquí: http://tips4java.wordpress.com/2009/07/05/hsl-color/ TL; DR: El código está aquí: http://www.camick.com/java/source/hslcolor.java

Los métodos son bastante fáciles de extraer si no desea usar toda la clase.

No parece que el autor de la clase haya incluido una licencia, aunque el contexto de la publicación del blog parece implicar el dominio público. Usa tu propio juicio.

Editar: me doy cuenta de HSB! = HSL, la respuesta a continuación es para HSB.

No creo que haya ninguna necesidad de usar espacios de colores aquí. Prueba algo como lo siguiente:

float hue = 0.9f; //hue
float saturation = 1.0f; //saturation
float brightness = 0.8f; //brightness

Color myRGBColor = Color.getHSBColor(hue, saturation, brightness);

Aquí hay una implementación simple que devolverá un color basado en los valores de tono, saturación y ligereza de 0.0 a 1.0 ...

static public Color hslColor(float h, float s, float l) {
    float q, p, r, g, b;

    if (s == 0) {
        r = g = b = l; // achromatic
    } else {
        q = l < 0.5 ? (l * (1 + s)) : (l + s - l * s);
        p = 2 * l - q;
        r = hue2rgb(p, q, h + 1.0f / 3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1.0f / 3);
    }
    return new Color(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255));
}

Editar por Yona-Appletree:

Encontré lo que creo que es la función correcta de Hue2RGB y la probé como funcionando:

private static float hue2rgb(float p, float q, float h) {
    if (h < 0) {
        h += 1;
    }

    if (h > 1) {
        h -= 1;
    }

    if (6 * h < 1) {
        return p + ((q - p) * 6 * h);
    }

    if (2 * h < 1) {
        return q;
    }

    if (3 * h < 2) {
        return p + ((q - p) * 6 * ((2.0f / 3.0f) - h));
    }

    return p;
}

Quizás este ayudará. El JDK no parece ser muy útil cuando quiere usar colores en otro espacio de color.

Editar: en ColorSpace.getName(idx) Ahí está este pequeño fragmento:

 case ColorSpace.TYPE_HLS:
                    compName = new String[] {"Hue", "Lightness", 
                                             "Saturation"};

Por lo tanto, era lo que pensaba, pero al observar la jerarquía de tipos del espacio de colores no parece usarse o implementarse de ninguna manera en ninguna parte. ColorSpace se extiende solo por otras dos clases Boguscolorspace e ICC_Colorspace, por lo que supongo que esperan que los desarrolladores creen sus propias implementaciones para diferentes espacios de color.

Si su entrada es widgets swing/awt, entonces con Java 7 Jcolorchooser Puede obtener color de los espacios HSV y HSL. http://java.dzone.com/articles/new-lochooser-jdk-7

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