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::*;
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),
})
}
}