w3schools ombre colores color codigo buscar java color-space hsl

java - ombre - gradient color w3schools



¿Cómo puedo usar el espacio de colores HSL en Java? (6)

Aquí hay una implementación simple que devolverá un Color basado en valores de matiz, saturación y luminosidad 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)); }

EDITADO por Yona-Appletree:

Encontré lo que creo que es la función hue2rgb correcta 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; }

He echado un vistazo a la clase ColorSpace y he encontrado la constante TYPE_HLS (que presumiblemente es HSL en un orden diferente).

¿Puedo usar esta constante para crear un Color partir de matiz, saturación y luminosidad? Si no es así, ¿hay alguna clase de Java para esto, o tengo que escribir la mía?


La mayoría de las respuestas dadas aquí parecen asumir que HSL == HSB, lo cual es falso. El espacio de colores HSB es útil (y se usa) 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 reseña 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 que contiene son bastante fáciles de extraer si no desea utilizar toda la clase.

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




Tal vez http://tips4java.wordpress.com/2009/07/05/hsl-color/ ayude. El JDK no parece ser muy útil al querer usar colores en otro espacio de color.

Edición: En ColorSpace.getName(idx) hay un pequeño fragmento de ColorSpace.getName(idx) :

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

así que fue lo que pensó, pero al observar la jerarquía de tipos de ColorSpace, no parece que se use ni se implemente de ninguna manera. ColorSpace se extiende solo por otras dos clases BogusColorSpace e ICC_ColorSpace, así que supongo que esperan que los desarrolladores creen sus propias implementaciones para diferentes espacios de color.


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

No creo que haya necesidad de usar ColorSpaces aquí. Intente 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);