RGB to HSL conversion
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
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.
Thank you so much for your help, Chris. This worked perfectly.
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.
it is tempting to post an expr solution now, but unfortunately there is some dumb bug in this patch. ^^
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];
}