Skip to main content

mozjpeg/
colorspace.rs

1pub use crate::ffi::J_COLOR_SPACE as ColorSpace;
2
3pub trait ColorSpaceExt {
4    /// Number of channels (including unused alpha) in this color space
5    fn num_components(&self) -> usize;
6}
7
8impl ColorSpaceExt for ColorSpace {
9    fn num_components(&self) -> usize {
10        match *self {
11            ColorSpace::JCS_UNKNOWN => 0,
12            ColorSpace::JCS_GRAYSCALE => 1,
13            ColorSpace::JCS_RGB => 3,
14            ColorSpace::JCS_YCbCr => 3,
15            ColorSpace::JCS_CMYK => 4,
16            ColorSpace::JCS_YCCK => 4,
17            ColorSpace::JCS_EXT_RGB => 3,
18            ColorSpace::JCS_EXT_RGBX => 4,
19            ColorSpace::JCS_EXT_BGR => 3,
20            ColorSpace::JCS_EXT_BGRX => 4,
21            ColorSpace::JCS_EXT_XBGR => 4,
22            ColorSpace::JCS_EXT_XRGB => 4,
23            ColorSpace::JCS_EXT_RGBA => 4,
24            ColorSpace::JCS_EXT_BGRA => 4,
25            ColorSpace::JCS_EXT_ABGR => 4,
26            ColorSpace::JCS_EXT_ARGB => 4,
27            ColorSpace::JCS_RGB565 => 3,
28        }
29    }
30}
31
32#[test]
33fn test() {
34    use crate::ffi;
35    assert_eq!(3, ffi::J_COLOR_SPACE::JCS_YCbCr.num_components());
36    assert_eq!(3, ffi::J_COLOR_SPACE::JCS_RGB.num_components());
37    assert_eq!(1, ffi::J_COLOR_SPACE::JCS_GRAYSCALE.num_components());
38}