#[allow(clippy::upper_case_acronyms)]
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum ColorSpace {
RGB,
RGBA,
YCbCr,
Luma,
LumaA,
YCCK,
CMYK,
BGR,
BGRA,
Unknown,
ARGB,
HSL,
HSV,
MultiBand(core::num::NonZeroU32)
}
impl ColorSpace {
pub const fn num_components(&self) -> usize {
match self {
Self::RGB | Self::YCbCr | Self::BGR | Self::HSV | Self::HSL => 3,
Self::RGBA | Self::YCCK | Self::CMYK | Self::BGRA | Self::ARGB => 4,
Self::Luma => 1,
Self::LumaA => 2,
Self::Unknown => 0,
Self::MultiBand(n) => n.get() as usize
}
}
pub const fn has_alpha(&self) -> bool {
matches!(self, Self::RGBA | Self::LumaA | Self::BGRA | Self::ARGB)
}
pub const fn is_grayscale(&self) -> bool {
matches!(self, Self::LumaA | Self::Luma)
}
pub const fn alpha_position(&self) -> Option<usize> {
match self {
ColorSpace::RGBA => Some(3),
ColorSpace::LumaA => Some(1),
ColorSpace::BGRA => Some(3),
ColorSpace::ARGB => Some(0),
_ => None
}
}
}
pub static ALL_COLORSPACES: [ColorSpace; 12] = [
ColorSpace::RGB,
ColorSpace::RGBA,
ColorSpace::LumaA,
ColorSpace::Luma,
ColorSpace::CMYK,
ColorSpace::BGRA,
ColorSpace::BGR,
ColorSpace::YCCK,
ColorSpace::YCbCr,
ColorSpace::ARGB,
ColorSpace::HSL,
ColorSpace::HSV
];
#[allow(non_camel_case_types)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum ColorCharacteristics {
sRGB,
Linear
}
#[derive(Default, Debug, Copy, Clone)]
pub struct SingleColorPrimary {
pub x: f64,
pub y: f64,
pub z: f64
}
#[derive(Default, Debug, Copy, Clone)]
pub struct ColorPrimaries {
pub red: SingleColorPrimary,
pub green: SingleColorPrimary,
pub blue: SingleColorPrimary
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum RenderingIntent {
AbsoluteColorimetric,
Saturation,
RelativeColorimetric,
Perceptual
}