#[cfg_attr(not(tarpaulin), inline(always))]
pub(crate) fn gbr_to_rgb_row(g: &[u8], b: &[u8], r: &[u8], rgb_out: &mut [u8], width: usize) {
debug_assert!(g.len() >= width, "g row too short");
debug_assert!(b.len() >= width, "b row too short");
debug_assert!(r.len() >= width, "r row too short");
debug_assert!(rgb_out.len() >= width * 3, "rgb_out row too short");
for x in 0..width {
let dst = x * 3;
rgb_out[dst] = r[x];
rgb_out[dst + 1] = g[x];
rgb_out[dst + 2] = b[x];
}
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub(crate) fn gbra_to_rgba_row(
g: &[u8],
b: &[u8],
r: &[u8],
a: &[u8],
rgba_out: &mut [u8],
width: usize,
) {
debug_assert!(g.len() >= width, "g row too short");
debug_assert!(b.len() >= width, "b row too short");
debug_assert!(r.len() >= width, "r row too short");
debug_assert!(a.len() >= width, "a row too short");
debug_assert!(rgba_out.len() >= width * 4, "rgba_out row too short");
for x in 0..width {
let dst = x * 4;
rgba_out[dst] = r[x];
rgba_out[dst + 1] = g[x];
rgba_out[dst + 2] = b[x];
rgba_out[dst + 3] = a[x];
}
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub(crate) fn gbr_to_rgba_opaque_row(
g: &[u8],
b: &[u8],
r: &[u8],
rgba_out: &mut [u8],
width: usize,
) {
debug_assert!(g.len() >= width, "g row too short");
debug_assert!(b.len() >= width, "b row too short");
debug_assert!(r.len() >= width, "r row too short");
debug_assert!(rgba_out.len() >= width * 4, "rgba_out row too short");
for x in 0..width {
let dst = x * 4;
rgba_out[dst] = r[x];
rgba_out[dst + 1] = g[x];
rgba_out[dst + 2] = b[x];
rgba_out[dst + 3] = 0xFF;
}
}