Skip to content

Commit 0ac2c5c

Browse files
committed
some more work on conversions
1 parent 2cd5e9a commit 0ac2c5c

File tree

2 files changed

+59
-3
lines changed

2 files changed

+59
-3
lines changed

css-color-4/LCH-examples.html

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<html>
2+
<meta charset="utf-8"></meta>
3+
<script src="math.js"></script>
4+
<script src="conversions.js"></script>
5+
<script>
6+
// convert a sampling of
7+
// several RGB colorspaces
8+
// to Lab and LCH
9+
10+
console.log("sRGB");
11+
12+
for (var r =0; r <=1; r+=0.5) {
13+
for (var g =0; g <=1; g+=0.5) {
14+
for (var b =0; b <=1; b+=0.5) {
15+
console.log("r=", r, " g=", g, "b=", b);
16+
var lab = D65_to_D50(XYZ_to_Lab(lin_sRGB_to_XYZ(lin_sRGB([r, g, b]))));
17+
console.log("Lab=",lab);
18+
console.log("LCH=", Lab_to_LCH(lab));
19+
}
20+
}
21+
};
22+
23+
console.log("image-p3");
24+
25+
// I am a bad person
26+
27+
for (var r =0; r <=1; r+=0.5) {
28+
for (var g =0; g <=1; g+=0.5) {
29+
for (var b =0; b <=1; b+=0.5) {
30+
console.log("r=", r, " g=", g, "b=", b);
31+
var lab = D65_to_D50(XYZ_to_Lab(lin_P3_to_XYZ(lin_P3([r, g, b]))));
32+
console.log("Lab=",lab);
33+
console.log("LCH=", Lab_to_LCH(lab));
34+
}
35+
}
36+
};
37+
38+
console.log("rec2020");
39+
40+
// write-once paste-often
41+
42+
for (var r =0; r <=1; r+=0.5) {
43+
for (var g =0; g <=1; g+=0.5) {
44+
for (var b =0; b <=1; b+=0.5) {
45+
console.log("r=", r, " g=", g, "b=", b);
46+
var lab = D65_to_D50(XYZ_to_Lab(lin_2020_to_XYZ(lin_2020([r, g, b]))));
47+
console.log("Lab=",lab);
48+
console.log("LCH=", Lab_to_LCH(lab));
49+
}
50+
}
51+
};
52+
53+
54+
</script>
55+
</html>

css-color-4/conversions.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,9 @@ function XYZ_to_Lab(XYZ) {
199199
var f = xyz.map(value => value > ε ? Math.cbrt(value) : (κ * value + 16)/116);
200200

201201
return [
202-
(116 * f[1]) - 16, // L
202+
(116 * f[1]) - 16, // L
203203
500 * (f[0] - f[1]), // a
204-
200 * (f[1] - f[2]) // b
204+
200 * (f[1] - f[2]) // b
205205
];
206206
}
207207

@@ -231,10 +231,11 @@ function Lab_to_XYZ(Lab) {
231231

232232
function Lab_to_LCH(Lab) {
233233
// Convert to polar form
234+
var hue = Math.atan2(Lab[2], Lab[1]) * 180 / Math.PI;
234235
return [
235236
Lab[0], // L is still L
236237
Math.sqrt(Math.pow(Lab[1], 2) + Math.pow(Lab[2], 2)), // Chroma
237-
Math.atan2(Lab[2], Lab[1]) * 180 / Math.PI // Hue, in degrees
238+
hue >= 0 ? hue : hue + 360 // Hue, in degrees [0 to 360)
238239
];
239240
}
240241

0 commit comments

Comments
 (0)