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