1 | export type Color = [number, number, number];
|
2 |
|
3 | export function yuv2rgb(yuv: Color): Color {
|
4 | const y = yuv[0],
|
5 | u = yuv[1],
|
6 | v = yuv[2];
|
7 | let r, g, b;
|
8 |
|
9 | r = y * 1 + u * 0 + v * 1.13983;
|
10 | g = y * 1 + u * -0.39465 + v * -0.5806;
|
11 | b = y * 1 + u * 2.02311 + v * 0;
|
12 |
|
13 | r = Math.min(Math.max(0, r), 1);
|
14 | g = Math.min(Math.max(0, g), 1);
|
15 | b = Math.min(Math.max(0, b), 1);
|
16 |
|
17 | return [r * 255, g * 255, b * 255];
|
18 | }
|
19 |
|
20 | export function rgb2yuv(rgb: Color): Color {
|
21 | const r = rgb[0] / 255,
|
22 | g = rgb[1] / 255,
|
23 | b = rgb[2] / 255;
|
24 |
|
25 | const y = r * 0.299 + g * 0.587 + b * 0.114;
|
26 | const u = r * -0.14713 + g * -0.28886 + b * 0.436;
|
27 | const v = r * 0.615 + g * -0.51499 + b * -0.10001;
|
28 |
|
29 | return [y, u, v];
|
30 | }
|