retro_rs/
fb_to_image.rs

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}