Crate deltae[−][src]
Expand description
Calculate Delta E (color difference) between two colors in CIE Lab space.
Examples
use std::error::Error; use deltae::*; fn main() -> Result<(), Box<dyn Error>>{ // Lab from a string let lab0: LabValue = "89.73, 1.88, -6.96".parse()?; // Lab directly from values let lab1 = LabValue { l: 95.08, a: -0.17, b: -10.81, }.validate()?; // Validate that the values are in range // Create your own Lab type #[derive(Clone, Copy)] struct MyLab(f32, f32, f32); // Types that implement Into<LabValue> also implement the Delta trait impl From<MyLab> for LabValue { fn from(mylab: MyLab) -> Self { LabValue { l: mylab.0, a: mylab.1, b: mylab.2 } } } let mylab = MyLab(95.08, -0.17, -10.81); // Implement DeltaEq for your own types impl<D: Delta + Copy> DeltaEq<D> for MyLab {} // Assert that colors are equivalent within a tolerance assert_delta_eq!(mylab, lab1, DE2000, 0.0, "mylab is not equal to lab1!"); // Calculate DeltaE between two lab values let de0 = DeltaE::new(&lab0, &lab1, DE2000); // Use the Delta trait let de1 = lab0.delta(lab1, DE2000); assert_eq!(de0, de1); // Convert to other color types let lch0 = LchValue::from(lab0); let xyz0 = XyzValue::from(lab1); // If DE2000 is less than 1.0, the colors are considered equivalent assert!(lch0.delta_eq(&lab0, DE2000, 1.0)); assert!(xyz0.delta_eq(&lab1, DE2000, 1.0)); // Calculate DeltaE between different color types let de2 = lch0.delta(xyz0, DE2000); assert_eq!(de2.round_to(4), de0.round_to(4)); // There is some loss of accuracy in the conversion. // Usually rounding to 4 decimal places is more than enough. // Recalculate DeltaE with different method let de3 = de2.with_method(DE1976); println!("{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}\n", lab0, // [L:89.73, a:1.88, b:-6.96] lab1, // [L:95.08, a:-0.17, b:-10.81] lch0, // [L:89.73, c:7.2094383, h:285.11572] xyz0, // [X:0.84574246, Y:0.8780792, Z:0.8542397] de0, // 5.316941 de1, // 5.316941 de2, // 5.316937 de3, // 6.902717 ); Ok(()) }
Re-exports
pub use DEMethod::*; | |
pub use color::*; | |
pub use eq::*; |
Modules
color | Manipulate and convert CIE L*a*b* and Lch colors. |
eq |
|
Macros
assert_delta_eq | Convenience macro for asserting two values are equivalent within a tolerance |
Structs
DeltaE | The measured difference between two colors |
Enums
DEMethod | The most common DeltaE methods |
Constants
DECMC1 | DeltaE CMC (1:1) |
DECMC2 | DeltaE CMC (2:1) |
Traits
Delta | Trait to determine color difference between various types. As long as the type can be converted to Lab, we can calculate DeltaE. |
Round | Trait for rounding values to a number of decimal places |
Validate | Trait to validate whether a type has appropriate values |