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}