image_data.rs

 1use crate::geometry::vector::{vec2i, Vector2I};
 2use image::{Bgra, ImageBuffer};
 3use std::sync::{
 4    atomic::{AtomicUsize, Ordering::SeqCst},
 5    Arc,
 6};
 7
 8pub struct ImageData {
 9    pub id: usize,
10    data: ImageBuffer<Bgra<u8>, Vec<u8>>,
11}
12
13impl ImageData {
14    pub fn new(data: ImageBuffer<Bgra<u8>, Vec<u8>>) -> Arc<Self> {
15        static NEXT_ID: AtomicUsize = AtomicUsize::new(0);
16
17        Arc::new(Self {
18            id: NEXT_ID.fetch_add(1, SeqCst),
19            data,
20        })
21    }
22
23    pub fn as_bytes(&self) -> &[u8] {
24        &self.data
25    }
26
27    pub fn size(&self) -> Vector2I {
28        let (width, height) = self.data.dimensions();
29        vec2i(width as i32, height as i32)
30    }
31}