Support loading and displaying of image palette #16
|
@ -71,6 +71,22 @@ impl TIMInfo {
|
|||
}
|
||||
|
||||
pub fn get_slint_images(&self) -> (slint::Image, Option<slint::Image>) {
|
||||
(slint::Image::from_rgba8_premultiplied(self.image_data.clone()), None)
|
||||
(slint::Image::from_rgba8_premultiplied(self.image_data.clone()), if let Some(palette) = &self.palette {
|
||||
let width = if palette.len() <= 16 {16} else {256};
|
||||
Some(Self::get_palette_image(palette, width, 1))
|
||||
} else {
|
||||
None
|
||||
})
|
||||
}
|
||||
|
||||
fn get_palette_image(palette: &Vec<Rgba8Pixel>, width: u32, height: u32) -> slint::Image {
|
||||
let mut image_data = SharedPixelBuffer::new(width, height);
|
||||
let dst_pixels = image_data.make_mut_slice();
|
||||
|
||||
for (idx, byte) in dst_pixels.iter_mut().enumerate() {
|
||||
*byte = if idx < palette.len() {palette[idx]} else {Rgba8Pixel::new(0, 0, 0, 0xFF)};
|
||||
}
|
||||
|
||||
slint::Image::from_rgba8_premultiplied(image_data.clone())
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue