1extern crate image;
2use crate::emulator::Emulator;
3use crate::error::RetroRsError;
4use std::convert::TryInto;
5pub trait FramebufferToImageBuffer {
6 fn create_imagebuffer(
10 &self,
11 ) -> Result<image::ImageBuffer<image::Rgb<u8>, Vec<u8>>, RetroRsError>;
12}
13impl FramebufferToImageBuffer for Emulator {
14 fn create_imagebuffer(
15 &self,
16 ) -> Result<image::ImageBuffer<image::Rgb<u8>, Vec<u8>>, RetroRsError> {
17 let (w, h) = self.framebuffer_size();
18 let mut bytes = vec![0; w * h * 3];
19 self.copy_framebuffer_rgb888(&mut bytes)?;
20 let w: u32 = w.try_into()?;
21 let h: u32 = h.try_into()?;
22 image::ImageBuffer::from_vec(w, h, bytes).ok_or(RetroRsError::ImageBufferError)
23 }
24}