1#[inline]
2#[must_use]
3pub fn argb555to888(lo: u8, hi: u8) -> (u8, u8, u8) {
4 let r = (hi & 0b0111_1100) >> 2;
5 let g = ((hi & 0b0000_0011) << 3) + ((lo & 0b1110_0000) >> 5);
6 let b = lo & 0b0001_1111;
7 let r = (r << 3) | (r >> 2);
9 let g = (g << 3) | (g >> 2);
10 let b = (b << 3) | (b >> 2);
11 (r, g, b)
12}
13
14#[inline]
15#[must_use]
16pub fn rgb565to888(lo: u8, hi: u8) -> (u8, u8, u8) {
17 let r = (hi & 0b1111_1000) >> 3;
18 let g = ((hi & 0b0000_0111) << 3) + ((lo & 0b1110_0000) >> 5);
19 let b = lo & 0b0001_1111;
20 let r = (r << 3) | (r >> 2);
22 let g = (g << 2) | (g >> 3);
23 let b = (b << 3) | (b >> 2);
24 (r, g, b)
25}
26#[inline]
27#[allow(clippy::cast_possible_truncation)]
28#[must_use]
29pub fn rgb332_to_rgb888(col: u8) -> (u8, u8, u8) {
30 let col = u32::from(col);
31 let r = (((col & 0b1110_0000) >> 5) * 255) / 8;
32 let g = (((col & 0b0001_1100) >> 2) * 255) / 8;
33 let b = ((col & 0b0000_0011) * 255) / 4;
34 debug_assert!(r <= 255);
35 debug_assert!(g <= 255);
36 debug_assert!(b <= 255);
37 (r as u8, g as u8, b as u8)
38}
39#[inline]
40#[allow(clippy::cast_possible_truncation)]
41#[must_use]
42pub fn rgb888_to_rgb332(r: u8, g: u8, b: u8) -> u8 {
43 let r = ((u32::from(r) * 8) / 256) as u8;
44 let g = ((u32::from(g) * 8) / 256) as u8;
45 let b = ((u32::from(b) * 4) / 256) as u8;
46 debug_assert!(r <= 7);
47 debug_assert!(g <= 7);
48 debug_assert!(b <= 3);
49 (r << 5) + (g << 2) + b
50}