RGB to HSL conversion


    Apr 18 2014 | 7:26 pm
    Hi,
    Can anyone help me with this? I am looking to convert RGB values that will be typed in the Messages boxes to HSL values for the Color Swatch. I am looking to convert these values within my patch, I have tried some externals but I could not get them to work, like Jasch RGBtoHSL external.
    Can someone help me with this?
    Thank you in advanec

    • Apr 18 2014 | 8:11 pm
      The swatch objects expects RGB values by default. There's no need to convert to HSL (unless I'm completely misunderstanding what you mean). If you're just trying to convert a triad of RGB values to a triad of HSL values, see http://www.rapidtables.com/convert/color/rgb-to-hsl.htm. Or you can let Jitter do it for you.
    • Apr 18 2014 | 10:06 pm
      Thank you so much for your help, Chris. This worked perfectly.
    • Apr 19 2014 | 5:43 am
      Keep in mind that jit.rgb2hsl processes 360 degrees of hue with only 8-bits of depth (255). That means that there can be as much as a degree and a half of error throughout the hue values.. which can be very noticeable when compared to accurate hue.
      For the fastest and most accurate conversion, use the rgb2hsl gen object inside of jit.pix.
    • Apr 19 2014 | 7:40 am
      it is tempting to post an expr solution now, but unfortunately there is some dumb bug in this patch. ^^
    • Apr 22 2014 | 6:00 am
      I needed to do a simple conversion from an RGB color to HSL values (and back again) in part of some javascript code and found this somewhere on the web, which works nicely. The other solutions look more efficient, but maybe if you are in the same boat I was and didn't want to leave javascript for the conversion:
      //colorspace conversions 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; } //post("rgbC:", [h,s,l], "\n"); return [h, s, l]; } function hslToRgb(h, s, l){ var r, g, b;
      if(s == 0){ r = g = b = l; // achromatic }else{ 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); } r = Math.round(r*255); g = Math.round(g*255); b = Math.round(b*255); //post("hslC:", [r,g,b], "\n"); return [r, g, b]; }