sort out hsl to rgb conversion
This commit is contained in:
parent
e6f4382b30
commit
cea9e60e0a
2 changed files with 36 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue