1use ra2_pal::Palette;
2use ra2_types::{Ra2Error, Rgba, RgbaImage};
3
4#[derive(Clone, Debug, Default)]
6pub struct ShpFrame {
7 pub x: u16, pub y: u16, pub width: u16, pub height: u16, pub flags: u8, pub reserved1: [u8; 3], pub color: u32, pub reserved2: [u8; 4], pub offset: u32, pub buffer: Vec<u8>,
17}
18
19impl ShpFrame {
20 pub fn render(&self, palette: &Palette, width: u32, depth: u32) -> Result<RgbaImage, Ra2Error> {
21 let mut image = RgbaImage::new(width, depth);
22 let mut index = 0;
23 for dy in 0..self.height {
24 for dx in 0..self.width {
25 let pixel = image.get_pixel_mut((self.x + dx) as u32, (self.y + dy) as u32);
26 let color = self.buffer[index];
27 if color == 0 {
28 *pixel = Rgba([0, 0, 0, 0]);
29 }
30 else {
31 *pixel = palette.get_color(color)?.into();
32 }
33 index += 1;
34 }
35 }
36 Ok(image)
37 }
38}