Saltar al contenido

Conversión de color HSL a RGB

este problema se puede abordar de diferentes maneras, por lo tanto te dejamos la que para nosotros es la resolución más completa.

Solución:

Garry Tan publicó una solución Javascript en su blog (que él attributes a un mjijackson.com ahora desaparecido, pero está archivado aquí y el autor original tiene una esencia, gracias al usuario 2441511).

El código se vuelve a publicar a continuación:

HSL a RGB:

/**
 * Converts an HSL color value to RGB. Conversion formula
 * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
 * Assumes h, s, and l are contained in the set [0, 1] and
 * returns r, g, and b in the set [0, 255].
 *
 * @param   number  h       The hue
 * @param   number  s       The saturation
 * @param   number  l       The lightness
 * @return  Array           The RGB representation
 */
function hslToRgb(h, s, l)
    var r, g, b;

    if(s == 0)
        r = g = b = l; // achromatic
    else
        var hue2rgb = function hue2rgb(p, q, t)
            if(t < 0) t += 1;
            if(t > 1) t -= 1;
            if(t < 1/6) return p + (q - p) * 6 * t;
            if(t < 1/2) return q;
            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        

        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        var p = 2 * l - q;
        r = hue2rgb(p, q, h + 1/3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1/3);
    

    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];

RGB a HSL:

/**
 * Converts an RGB color value to HSL. Conversion formula
 * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
 * Assumes r, g, and b are contained in the set [0, 255] and
 * returns h, s, and l in the set [0, 1].
 *
 * @param   number  r       The red color value
 * @param   number  g       The green color value
 * @param   number  b       The blue color value
 * @return  Array           The HSL representation
 */
function rgbToHsl(r, g, b)
    r /= 255, g /= 255, b /= 255;
    var max = Math.max(r, g, b), min = Math.min(r, g, b);
    var h, s, l = (max + min) / 2;

    if(max == min)
        h = s = 0; // achromatic
    else
        var d = max - min;
        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
        switch(max)
            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
            case g: h = (b - r) / d + 2; break;
            case b: h = (r - g) / d + 4; break;
        
        h /= 6;
    

    return [h, s, l];

Encontré la forma más fácil, Python al rescate: D

colorsys.hls_to_rgb(h, l, s)

Convierta el color de las coordenadas HLS a las coordenadas RGB.

Implementación Java del código de Mohsen

Tenga en cuenta que todos los enteros se declaran como flotantes (es decir, 1f) y deben ser flotantes, de lo contrario, obtendrá colores grises.

HSL a RGB

 /**
 * Converts an HSL color value to RGB. Conversion formula
 * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
 * Assumes h, s, and l are contained in the set [0, 1] and
 * returns r, g, and b in the set [0, 255].
 *
 * @param h       The hue
 * @param s       The saturation
 * @param l       The lightness
 * @return int array, the RGB representation
 */
public static int[] hslToRgb(float h, float s, float l)
    float r, g, b;

    if (s == 0f) 
        r = g = b = l; // achromatic
     else 
        float q = l < 0.5f ? l * (1 + s) : l + s - l * s;
        float p = 2 * l - q;
        r = hueToRgb(p, q, h + 1f/3f);
        g = hueToRgb(p, q, h);
        b = hueToRgb(p, q, h - 1f/3f);
    
    int[] rgb = to255(r), to255(g), to255(b);
    return rgb;

public static int to255(float v)  return (int)Math.min(255,256*v); 

/** Helper method that converts hue to rgb */
public static float hueToRgb(float p, float q, float t) 
    if (t < 0f)
        t += 1f;
    if (t > 1f)
        t -= 1f;
    if (t < 1f/6f)
        return p + (q - p) * 6f * t;
    if (t < 1f/2f)
        return q;
    if (t < 2f/3f)
        return p + (q - p) * (2f/3f - t) * 6f;
    return p;

RGB a HSL

/**
 * Converts an RGB color value to HSL. Conversion formula
 * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
 * Assumes pR, pG, and bpBare contained in the set [0, 255] and
 * returns h, s, and l in the set [0, 1].
 *
 * @param pR       The red color value
 * @param pG       The green color value
 * @param pB       The blue color value
 * @return float array, the HSL representation
 */
public static float[] rgbToHsl(int pR, int pG, int pB) 
    float r = pR / 255f;
    float g = pG / 255f;
    float b = pB / 255f;

    float max = (r > g && r > b) ? r : (g > b) ? g : b;
    float min = (r < g && r < b) ? r : (g < b) ? g : b;

    float h, s, l;
    l = (max + min) / 2.0f;

    if (max == min) 
        h = s = 0.0f;
     else 
        float d = max - min;
        s = (l > 0.5f) ? d / (2.0f - max - min) : d / (max + min);

        if (r > g && r > b)
            h = (g - b) / d + (g < b ? 6.0f : 0.0f);

        else if (g > b)
            h = (b - r) / d + 2.0f;

        else
            h = (r - g) / d + 4.0f;

        h /= 6.0f;
    

    float[] hsl = h, s, l;
    return hsl;

Más adelante puedes encontrar las explicaciones de otros programadores, tú también puedes mostrar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *