retro_rs/
fb_to_image.rs

1extern crate image;
2use crate::emulator::Emulator;
3use crate::error::RetroRsError;
4use std::convert::TryInto;
5pub trait FramebufferToImageBuffer {
6    /// # Errors
7    /// [`RetroRsError::ImageBufferError`]: Failed to create image buffer
8    /// Others: See [`Emulator::copy_framebuffer_rgb888`].
9    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}