sort out hsl to rgb conversion

This commit is contained in:
Stewart Allen 2020-11-09 11:23:59 -05:00
commit cea9e60e0a
2 changed files with 36 additions and 7 deletions

View file

@ -248,6 +248,36 @@
return [H, S, V];
}
function hsl2rgb(h, s, l) {
let r, g, b;
if (s == 0) {
r = g = b = l; // achromatic
} else {
let 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;
}
let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
let p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
const rgb =
(((r * 255) & 0xff) << 16) |
(((g * 255) & 0xff) << 8) |
((b * 255) & 0xff);
return rgb;
}
// hsv values all = 0 to 1
function hsv2rgb(hsv, hex) {
let seg = Math.floor(hsv.h * 6),
@ -289,10 +319,12 @@
break;
}
// if (hex) return hsl2rgb(hsv.h, hsv.s, hsv.v);
return hex ? (
((out.r * 255) << 16) ||
((out.g * 255) << 8) ||
(out.b * 255)
(((out.r * 255) & 0xff) << 16) |
(((out.g * 255) & 0xff) << 8) |
((out.b * 255) & 0xff)
) : out;
}