diff --git a/mark-bin/src/main.rs b/mark-bin/src/main.rs index 359c32b..1d11964 100644 --- a/mark-bin/src/main.rs +++ b/mark-bin/src/main.rs @@ -94,6 +94,8 @@ enum DitherDifference { HyAbClamp, Ciede2000, Ciede2000Clamp, + Oklab, + OklabClamp, Manhattan, ManhattanClamp, } @@ -187,6 +189,8 @@ impl DitherCmd { HyAbClamp => self.run_cd::>(image), Ciede2000 => self.run_cd::(image), Ciede2000Clamp => self.run_cd::>(image), + Oklab => self.run_cd::(image), + OklabClamp => self.run_cd::>(image), Manhattan => self.run_cd::(image), ManhattanClamp => self.run_cd::>(image), } diff --git a/mark/src/dither.rs b/mark/src/dither.rs index 8112d27..f81266a 100644 --- a/mark/src/dither.rs +++ b/mark/src/dither.rs @@ -9,8 +9,8 @@ use std::marker::PhantomData; use image::RgbaImage; use palette::{ - Clamp, IntoColor, Lab, Srgb, - color_difference::{Ciede2000, HyAb}, + Clamp, IntoColor, Lab, Oklab, Srgb, + color_difference::{Ciede2000, EuclideanDistance, HyAb}, }; use rand::{Rng, SeedableRng, rngs::SmallRng}; @@ -65,6 +65,16 @@ impl> Difference for DiffCiede2000 { } } +pub struct DiffOklab; + +impl> Difference for DiffOklab { + fn diff(a: C, b: C) -> f32 { + let a: Oklab = a.into_color(); + let b: Oklab = b.into_color(); + a.distance(b) + } +} + pub struct DiffManhattan; impl> Difference for DiffManhattan {