27 lines
775 B
Rust
27 lines
775 B
Rust
/// Copia RGB565 (u16) -> RGBA8888 (u8[4]) para o frame do pixels.
|
|
/// Formato do pixels: RGBA8.
|
|
pub fn draw_rgb565_to_rgba8(src: &[u16], dst_rgba: &mut [u8]) {
|
|
for (i, &px) in src.iter().enumerate() {
|
|
let (r8, g8, b8) = rgb565_to_rgb888(px);
|
|
let o = i * 4;
|
|
dst_rgba[o] = r8;
|
|
dst_rgba[o + 1] = g8;
|
|
dst_rgba[o + 2] = b8;
|
|
dst_rgba[o + 3] = 0xFF;
|
|
}
|
|
}
|
|
|
|
/// Expande RGB565 para RGB888 (replicação de bits altos).
|
|
#[inline(always)]
|
|
pub fn rgb565_to_rgb888(px: u16) -> (u8, u8, u8) {
|
|
let r5 = ((px >> 11) & 0x1F) as u8;
|
|
let g6 = ((px >> 5) & 0x3F) as u8;
|
|
let b5 = (px & 0x1F) as u8;
|
|
|
|
let r8 = (r5 << 3) | (r5 >> 2);
|
|
let g8 = (g6 << 2) | (g6 >> 4);
|
|
let b8 = (b5 << 3) | (b5 >> 2);
|
|
|
|
(r8, g8, b8)
|
|
}
|