use image::{Rgba,};
use serde::{Deserialize, Serialize};
#[repr(C)]
#[derive(Copy, Clone, Debug, Default, Serialize, Deserialize)]
pub struct Ra2Color {
pub red: u8,
pub green: u8,
pub blue: u8,
}
impl From<Ra2Color> for Rgba<u8> {
fn from(value: Ra2Color) -> Self {
Rgba([
((value.red as u32 * 255) / 63) as u8,
((value.green as u32 * 255) / 63) as u8,
((value.blue as u32 * 255) / 63) as u8,
255,
])
}
}
impl From<Rgba<u8>> for Ra2Color {
fn from(value: Rgba<u8>) -> Self {
Self {
red: convert_8bit_to_5or6bit(value[0], false),
green: convert_8bit_to_5or6bit(value[1], true),
blue: convert_8bit_to_5or6bit(value[2], false),
}
}
}
pub fn convert_8bit_to_5or6bit(color: u8, is_green: bool) -> u8 {
let divider = if is_green { 4 } else { 8 };
(color as u32 / divider) as u8
}