use moxcms::{ColorProfile, Layout, TransformOptions};
use super::Color;
const ICC_COATED_GRACOL_2006: &[u8] = include_bytes!("GRACoL2006_Coated1v2.icc");
pub fn to_cmyk(color: &Color) -> [f32; 4] {
let source_profile = ColorProfile::new_srgb();
let target_profile = ColorProfile::new_from_slice(ICC_COATED_GRACOL_2006).unwrap();
let transform = source_profile
.create_transform_f32(
Layout::Rgb,
&target_profile,
Layout::Rgba,
TransformOptions::default(),
)
.unwrap();
let srgb = color.to_srgb();
let mut cmyk = [0f32; 4];
transform.transform(&srgb, &mut cmyk).unwrap();
for channel in cmyk.iter_mut() {
*channel *= 100.0;
}
cmyk
}
pub fn from_cmyk(cmyk: &[f32; 4]) -> Color {
let source_profile = ColorProfile::new_from_slice(ICC_COATED_GRACOL_2006).unwrap();
let target_profile = ColorProfile::new_srgb();
let transform = source_profile
.create_transform_f32(
Layout::Rgba,
&target_profile,
Layout::Rgb,
TransformOptions::default(),
)
.unwrap();
let mut cmyk = *cmyk;
for channel in cmyk.iter_mut() {
*channel /= 100.0;
}
let mut srgb = [0f32; 3];
transform.transform(&cmyk, &mut srgb).unwrap();
Color::from_srgb(srgb)
}