From 71cd39ab694c991924e7e5409f9c63f7252de909 Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Sat, 25 Jun 2022 01:15:00 +0200 Subject: [PATCH] Convert input to pixel data --- src/main.rs | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index bab5da7..2b8da32 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ use std::fmt; use actix_web::{get, web, App, HttpServer, HttpResponse, Responder, ResponseError, Result}; use actix_web::body::BoxBody; use actix_web::http::StatusCode; -use image::{ImageBuffer, ColorType, RgbImage, write_buffer_with_format}; +use image::{ImageBuffer, ColorType, Rgb, RgbImage, write_buffer_with_format}; use image::ImageOutputFormat::Png; #[derive(Debug)] @@ -26,6 +26,34 @@ impl ResponseError for ImageError { } } +struct StringToRgb<'a> { + text: &'a str, + iter: Box + 'a> +} + +impl<'a> StringToRgb<'a> { + fn new(text: &'a str) -> StringToRgb { + StringToRgb { text, iter: Box::new(text.chars()) } + } +} + + + +impl Iterator for StringToRgb<'_> { + type Item = Rgb; + fn next(&mut self) -> Option> { + let r = self.iter.next(); + let g = self.iter.next(); + let b = self.iter.next(); + if r.is_none() && g.is_none() && b.is_none() { + None + } + else { + Some(Rgb([r.unwrap_or('\0') as u8, g.unwrap_or('\0') as u8, b.unwrap_or('\0') as u8])) + } + } +} + fn to_imageresult (result: Result) -> Result { match result { Ok(v) => Ok(v), @@ -43,10 +71,12 @@ async fn img_gen(data: web::Path) -> Result { let mut cursor = Cursor::new(Vec::new()); let mut img: RgbImage = ImageBuffer::new(128, 128); let mut pixels = img.pixels_mut(); + //let mut rgb = Box::new(StringToRgb::new(&data)); + let mut rgb = StringToRgb::new(&data); - for c in data.chars() { - let mut p = pixels.next().unwrap(); - p.0 = [c as u8, 0, 0]; + for sp in rgb { + let mut dp = pixels.next().unwrap(); + dp.0 = sp.0; } to_imageresult(write_buffer_with_format(&mut cursor, &img, 128, 128, ColorType::Rgb8, Png))?; -- 2.34.1