update oklch implementation

This commit is contained in:
bgkillas 2024-11-02 09:48:01 -04:00
parent a1cce5d6e6
commit b93627eb6f

View file

@ -126,31 +126,31 @@ pub fn get_lch(color: [f64; 4]) -> (f64, f64, f64) {
}
pub fn rgb_to_oklch(color: &mut [f64; 4]) {
let mut l = 0.4122214708 * color[0] + 0.5363325363 * color[1] + 0.0514459929 * color[2];
let mut m = 0.2119034982 * color[0] + 0.6806995451 * color[1] + 0.1073969566 * color[2];
let mut s = 0.0883024619 * color[0] + 0.2817188376 * color[1] + 0.6299787005 * color[2];
let mut l = 0.4122214694707629 * color[0] + 0.5363325372617349 * color[1] + 0.0514459932675022 * color[2];
let mut m = 0.2119034958178251 * color[0] + 0.6806995506452344 * color[1] + 0.1073969535369405 * color[2];
let mut s = 0.0883024591900564 * color[0] + 0.2817188391361215 * color[1] + 0.6299787016738222 * color[2];
l = l.cbrt();
m = m.cbrt();
s = s.cbrt();
color[0] = 0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s;
color[1] = 1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s;
color[2] = 0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s;
color[0] = 0.210454268309314 * l + 0.7936177747023054 * m - 0.0040720430116193 * s;
color[1] = 1.9779985324311684 * l - 2.42859224204858 * m + 0.450593709617411 * s;
color[2] = 0.0259040424655478 * l + 0.7827717124575296 * m - 0.8086757549230774 * s;
}
fn oklch_to_rgb(color: &mut [f64; 4]) {
let mut l = color[0] + 0.3963377774 * color[1] + 0.2158037573 * color[2];
let mut m = color[0] - 0.1055613458 * color[1] - 0.0638541728 * color[2];
let mut s = color[0] - 0.0894841775 * color[1] - 1.2914855480 * color[2];
let mut l = color[0] + 0.3963377773761749 * color[1] + 0.2158037573099136 * color[2];
let mut m = color[0] - 0.1055613458156586 * color[1] - 0.0638541728258133 * color[2];
let mut s = color[0] - 0.0894841775298119 * color[1] - 1.2914855480194092 * color[2];
l = l.powi(3);
m = m.powi(3);
s = s.powi(3);
color[0] = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;
color[1] = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
color[2] = -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s;
color[0] = 4.07674163607596 * l - 3.3077115392580635 * m + 0.2309699031821046 * s;
color[1] = -1.2684379732850317 * l + 2.6097573492876887 * m - 0.3413193760026572 * s;
color[2] = -0.0041960761386754 * l - 0.7034186179359363 * m + 1.7076146940746116 * s;
}
fn shift_hue_by(color: &mut [f64; 4], diff: f64) {