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