1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use super::*;

// CMYK -> RGB
impl From<CmykColor> for RgbColor {
    fn from(cmyk: CmykColor) -> RgbColor {
        match Result::<RgbColor, ColorError>::from(cmyk) {
            Ok(rgb) => rgb,
            Err(err) => panic!("Converting CmykColor to RgbColor failed: {}", err),
        }
    }
}
impl From<CmykColor> for Result<RgbColor, ColorError> {
    fn from(cmyk: CmykColor) -> Result<RgbColor, ColorError> {
        let apply = |v| {
            (255.0 * (1.0f64 - v as f64 / 100.0) * (1.0 - cmyk.key as f64 / 100.0)).round() as u8
        };
        Ok(RgbColor {
            red: apply(cmyk.cyan),
            green: apply(cmyk.magenta),
            blue: apply(cmyk.yellow),
        })
    }
}