From fb30b41fb1f4ebbe5274d2cb93e98a1f2bec445f Mon Sep 17 00:00:00 2001 From: Rosyid Haryadi Date: Sat, 1 Mar 2025 21:06:18 +0700 Subject: upd image exporter --- src/view.rs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/view.rs b/src/view.rs index bf3a356..0ed5d43 100644 --- a/src/view.rs +++ b/src/view.rs @@ -22,6 +22,7 @@ impl<'a> View<'a> { } pub mod render_viewer { + use image::ImageFormat; use crate::global::Pixel; use super::*; @@ -41,14 +42,34 @@ pub mod render_viewer { Ok(format!("Output rendered to file {}", file_name)) } - pub fn png_exporter(data: &DisplayBuffer) -> Result { - let file_name = "output.png"; + fn common_img_format_exporter(data: &DisplayBuffer, img_format: ImageFormat) -> Result { + let ext = match img_format { + ImageFormat::Png => { "png" } + ImageFormat::Jpeg => { "jpeg" } + ImageFormat::Bmp => { "bmp" } + _ => { + return Err(std::io::Error::new(std::io::ErrorKind::Other, "Not supported")); + } + }; + let file_name = format!("output.{}", ext); let mut imgbuf = image::ImageBuffer::new(IMG_WIDTH as u32, IMG_HEIGHT as u32); for (x, y, pixel) in imgbuf.enumerate_pixels_mut() { let Pixel{r, g, b} = data[y as usize][x as usize]; *pixel = image::Rgb([r, g, b]); } - imgbuf.save(file_name).unwrap(); + imgbuf.save(file_name.clone()).unwrap(); Ok(format!("Output rendered to file {}", file_name)) } + + pub fn png_exporter(data: &DisplayBuffer) -> Result { + common_img_format_exporter(data, ImageFormat::Png) + } + + pub fn jpeg_exporter(data: &DisplayBuffer) -> Result { + common_img_format_exporter(data, ImageFormat::Jpeg) + } + + pub fn bmp_exporter(data: &DisplayBuffer) -> Result { + common_img_format_exporter(data, ImageFormat::Bmp) + } } -- cgit v1.2.3-70-g09d2