Skip to main content

blittle/convert/
rgb8.rs

1use crate::Surface;
2use crate::convert::{PixelConverter, f32_to_u8, grayscale, u8_to_f32};
3#[cfg(feature = "softbuffer")]
4use crate::sb::Zrgb;
5
6impl<S: AsRef<[[u8; 3]]> + AsMut<[[u8; 3]]>> PixelConverter<[u8; 3]> for Surface<'_, S, [u8; 3]> {
7    fn pixel_to_l8(pixel: &[u8; 3]) -> u8 {
8        f32_to_u8(Self::pixel_to_l32(pixel))
9    }
10
11    fn pixel_to_la8(pixel: &[u8; 3]) -> [u8; 2] {
12        [Self::pixel_to_l8(pixel), 255]
13    }
14
15    fn pixel_to_l32(pixel: &[u8; 3]) -> f32 {
16        grayscale(pixel[0], pixel[1], pixel[2])
17    }
18
19    fn pixel_to_la32(pixel: &[u8; 3]) -> [f32; 2] {
20        [Self::pixel_to_l32(pixel), 1.]
21    }
22
23    fn pixel_to_rgb8(pixel: &[u8; 3]) -> [u8; 3] {
24        *pixel
25    }
26
27    fn pixel_to_rgba8(pixel: &[u8; 3]) -> [u8; 4] {
28        [pixel[0], pixel[1], pixel[2], 255]
29    }
30
31    fn pixel_to_rgba32(pixel: &[u8; 3]) -> [f32; 4] {
32        [
33            u8_to_f32(pixel[0]),
34            u8_to_f32(pixel[1]),
35            u8_to_f32(pixel[2]),
36            1.,
37        ]
38    }
39
40    #[cfg(feature = "softbuffer")]
41    fn pixel_to_zrgb(pixel: &[u8; 3]) -> Zrgb {
42        Zrgb::new(pixel[0], pixel[1], pixel[2])
43    }
44}