use super::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg(target_endian = "little")]
#[allow(missing_docs)]
#[repr(C)]
pub struct ARGB32 {
pub b: u8,
pub g: u8,
pub r: u8,
pub a: u8,
}
impl ARGB32 {
pub const fn new(a: u8, r: u8, g: u8, b: u8) -> Self {
Self { a, r, g, b }
}
#[cfg(target_endian = "little")]
pub const fn from_rgb24(rgb: u32) -> Self {
Self {
a: 0xFF,
r: (rgb >> 16) as u8,
g: (rgb >> 8) as u8,
b: (rgb >> 0) as u8,
}
}
}
#[cfg(target_endian = "little")]
impl From<ARGB32> for u32 {
fn from(argb: ARGB32) -> Self {
u32::from(argb.b) | u32::from(argb.g) << 8 | u32::from(argb.r) << 16 | u32::from(argb.a) << 24
}
}
#[cfg(target_endian = "little")]
impl From<u32> for ARGB32 {
fn from(u: u32) -> Self {
Self {
a: (u >> 24) as u8,
r: (u >> 16) as u8,
g: (u >> 8) as u8,
b: (u >> 0) as u8,
}
}
}
pub const CONVERT_5BIT_CHANNEL_TO_8BIT_CHANNEL: [u8; 32] = [
0, 8, 16, 24, 32, 41, 49, 57, 65, 74, 82, 90, 98, 106, 115, 123, 131, 139, 148, 156, 164, 172,
180, 189, 197, 205, 213, 222, 230, 238, 246, 255,
];
pub const FOUR_COLOR_PALETTES: &[[ARGB32; 4]] = &[
[
ARGB32::new(0xFF, 0x9b, 0xbc, 0x0f),
ARGB32::new(0xFF, 0x8b, 0xac, 0x0f),
ARGB32::new(0xFF, 0x30, 0x62, 0x30),
ARGB32::new(0xFF, 0x0f, 0x38, 0x0f),
],
[
ARGB32::new(0xFF, 0xFF, 0xFF, 0xFF),
ARGB32::new(0xFF, 0xb6, 0xb6, 0xb6),
ARGB32::new(0xFF, 0x67, 0x67, 0x67),
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
],
[
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
ARGB32::new(0xFF, 0xAA, 0x00, 0x00),
ARGB32::new(0xFF, 0x00, 0xAA, 0x00),
ARGB32::new(0xFF, 0xAA, 0x55, 0x00),
],
[
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
ARGB32::new(0xFF, 0xFF, 0x55, 0x55),
ARGB32::new(0xFF, 0x55, 0xFF, 0x55),
ARGB32::new(0xFF, 0xFF, 0xFF, 0x55),
],
[
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
ARGB32::new(0xFF, 0x00, 0xAA, 0xAA),
ARGB32::new(0xFF, 0xAA, 0x00, 0xAA),
ARGB32::new(0xFF, 0xAA, 0xAA, 0xAA),
],
[
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
ARGB32::new(0xFF, 0x55, 0xFF, 0xFF),
ARGB32::new(0xFF, 0xFF, 0x55, 0xFF),
ARGB32::new(0xFF, 0xFF, 0xFF, 0xFF),
],
[
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
ARGB32::new(0xFF, 0x00, 0xAA, 0xAA),
ARGB32::new(0xFF, 0xAA, 0x00, 0x00),
ARGB32::new(0xFF, 0xAA, 0xAA, 0xAA),
],
[
ARGB32::new(0xFF, 0x00, 0x00, 0x00),
ARGB32::new(0xFF, 0x55, 0xFF, 0xFF),
ARGB32::new(0xFF, 0xFF, 0x55, 0x55),
ARGB32::new(0xFF, 0xFF, 0xFF, 0xFF),
],
[
ARGB32::from_rgb24(0xf8e8c8), ARGB32::from_rgb24(0xd89048), ARGB32::from_rgb24(0xa82820), ARGB32::from_rgb24(0x301850), ],
[
ARGB32::from_rgb24(0xd8d8c0), ARGB32::from_rgb24(0xc8b070), ARGB32::from_rgb24(0xb05010), ARGB32::from_rgb24(0x000000), ],
[
ARGB32::from_rgb24(0xf8c0f8), ARGB32::from_rgb24(0xe89850), ARGB32::from_rgb24(0x983860), ARGB32::from_rgb24(0x383898), ],
[
ARGB32::from_rgb24(0xf8f8a8), ARGB32::from_rgb24(0xc08048), ARGB32::from_rgb24(0xf80000), ARGB32::from_rgb24(0x501800), ],
[
ARGB32::from_rgb24(0xf8d8b0), ARGB32::from_rgb24(0x78c078), ARGB32::from_rgb24(0x688840), ARGB32::from_rgb24(0x583820), ],
[
ARGB32::from_rgb24(0xd8e8f8), ARGB32::from_rgb24(0xe08850), ARGB32::from_rgb24(0xa80000), ARGB32::from_rgb24(0x004010), ],
[
ARGB32::from_rgb24(0x000050), ARGB32::from_rgb24(0x00a0e8), ARGB32::from_rgb24(0x787800), ARGB32::from_rgb24(0xf8f858), ],
[
ARGB32::from_rgb24(0xf8e8e0), ARGB32::from_rgb24(0xf8b888), ARGB32::from_rgb24(0x804000), ARGB32::from_rgb24(0x301800), ],
[
ARGB32::from_rgb24(0xf0c8a0), ARGB32::from_rgb24(0xc08848), ARGB32::from_rgb24(0x287800), ARGB32::from_rgb24(0x000000), ],
[
ARGB32::from_rgb24(0xf8f8f8), ARGB32::from_rgb24(0xf8e850), ARGB32::from_rgb24(0xf83000), ARGB32::from_rgb24(0x500058), ],
[
ARGB32::from_rgb24(0xf8c0f8), ARGB32::from_rgb24(0xe88888), ARGB32::from_rgb24(0x7830e8), ARGB32::from_rgb24(0x282898), ],
[
ARGB32::from_rgb24(0xf8f8a0), ARGB32::from_rgb24(0x00f800), ARGB32::from_rgb24(0xf83000), ARGB32::from_rgb24(0x000050), ],
[
ARGB32::from_rgb24(0xf8c880), ARGB32::from_rgb24(0x90b0e0), ARGB32::from_rgb24(0x281060), ARGB32::from_rgb24(0x100810), ],
[
ARGB32::from_rgb24(0xd0f8f8), ARGB32::from_rgb24(0xf89050), ARGB32::from_rgb24(0xa00000), ARGB32::from_rgb24(0x180000), ],
[
ARGB32::from_rgb24(0x68b838), ARGB32::from_rgb24(0xe05040), ARGB32::from_rgb24(0xe0b880), ARGB32::from_rgb24(0x001800), ],
[
ARGB32::from_rgb24(0xf8f8f8), ARGB32::from_rgb24(0xb8b8b8), ARGB32::from_rgb24(0x707070), ARGB32::from_rgb24(0x000000), ],
[
ARGB32::from_rgb24(0xf8d098), ARGB32::from_rgb24(0x70c0c0), ARGB32::from_rgb24(0xf86028), ARGB32::from_rgb24(0x304860), ],
[
ARGB32::from_rgb24(0xd8d8c0), ARGB32::from_rgb24(0xe08020), ARGB32::from_rgb24(0x005000), ARGB32::from_rgb24(0x001010), ],
[
ARGB32::from_rgb24(0xe0a8c8), ARGB32::from_rgb24(0xf8f878), ARGB32::from_rgb24(0x00b8f8), ARGB32::from_rgb24(0x202058), ],
[
ARGB32::from_rgb24(0xf0f8b8), ARGB32::from_rgb24(0xe0a878), ARGB32::from_rgb24(0x08c800), ARGB32::from_rgb24(0x000000), ],
[
ARGB32::from_rgb24(0xf8f8c0), ARGB32::from_rgb24(0xe0b068), ARGB32::from_rgb24(0xb07820), ARGB32::from_rgb24(0x504870), ],
[
ARGB32::from_rgb24(0x7878c8), ARGB32::from_rgb24(0xf868f8), ARGB32::from_rgb24(0xf8d000), ARGB32::from_rgb24(0x404040), ],
[
ARGB32::from_rgb24(0x60d850), ARGB32::from_rgb24(0xf8f8f8), ARGB32::from_rgb24(0xc83038), ARGB32::from_rgb24(0x380000), ],
[
ARGB32::from_rgb24(0xe0f8a0), ARGB32::from_rgb24(0x78c838), ARGB32::from_rgb24(0x488818), ARGB32::from_rgb24(0x081800), ],
[
ARGB32::from_rgb24(0xf0a868), ARGB32::from_rgb24(0x78a8f8), ARGB32::from_rgb24(0xd000d0), ARGB32::from_rgb24(0x000078), ],
[
ARGB32::from_rgb24(0xf0e8f0), ARGB32::from_rgb24(0xe8a060), ARGB32::from_rgb24(0x407838), ARGB32::from_rgb24(0x180808), ],
[
ARGB32::from_rgb24(0xf8e0e0), ARGB32::from_rgb24(0xd8a0d0), ARGB32::from_rgb24(0x98a0e0), ARGB32::from_rgb24(0x080000), ],
[
ARGB32::from_rgb24(0xf8f8b8), ARGB32::from_rgb24(0x90c8c8), ARGB32::from_rgb24(0x486878), ARGB32::from_rgb24(0x082048), ],
[
ARGB32::from_rgb24(0xf8d8a8), ARGB32::from_rgb24(0xe0a878), ARGB32::from_rgb24(0x785888), ARGB32::from_rgb24(0x002030), ],
[
ARGB32::from_rgb24(0xb8d0d0), ARGB32::from_rgb24(0xd880d8), ARGB32::from_rgb24(0x8000a0), ARGB32::from_rgb24(0x380000), ],
[
ARGB32::from_rgb24(0xb0e018), ARGB32::from_rgb24(0xb82058), ARGB32::from_rgb24(0x281000), ARGB32::from_rgb24(0x008060), ],
[
ARGB32::from_rgb24(0xf8f8c8), ARGB32::from_rgb24(0xb8c058), ARGB32::from_rgb24(0x808840), ARGB32::from_rgb24(0x405028), ],
];