From f8ff567a006334b08e83c012122b4180c1b3b3bf Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 22 Feb 2025 21:39:11 +0100 Subject: [PATCH] Add dither algorithm option --- showbits-thermal-printer/src/drawer/image.rs | 4 +++- showbits-thermal-printer/src/server.rs | 13 ++++++++++++- showbits-thermal-printer/static/image.html | 7 +++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/showbits-thermal-printer/src/drawer/image.rs b/showbits-thermal-printer/src/drawer/image.rs index 13f1f0e..a8d27ef 100644 --- a/showbits-thermal-printer/src/drawer/image.rs +++ b/showbits-thermal-printer/src/drawer/image.rs @@ -3,7 +3,7 @@ use palette::{FromColor, IntoColor, LinLumaa}; use showbits_common::{ Node, Tree, WidgetExt, color::{self, BLACK, WHITE}, - widgets::Image, + widgets::{DitherAlgorithm, Image}, }; use taffy::{AlignItems, Display, FlexDirection, style_helpers::percent}; @@ -14,6 +14,7 @@ use super::{Context, Drawing}; pub struct ImageDrawing { pub image: RgbaImage, pub bright: bool, + pub algo: DitherAlgorithm, } impl Drawing for ImageDrawing { @@ -31,6 +32,7 @@ impl Drawing for ImageDrawing { let image = Image::new(image) .with_dither_palette(&[BLACK, WHITE]) + .with_dither_algorithm(self.algo) .node() .register(&mut tree)?; diff --git a/showbits-thermal-printer/src/server.rs b/showbits-thermal-printer/src/server.rs index 7f61191..2518cb1 100644 --- a/showbits-thermal-printer/src/server.rs +++ b/showbits-thermal-printer/src/server.rs @@ -10,6 +10,7 @@ use axum::{ routing::{get, post}, }; use serde::Deserialize; +use showbits_common::widgets::DitherAlgorithm; use tokio::{net::TcpListener, sync::mpsc}; use crate::drawer::{ @@ -112,6 +113,7 @@ async fn post_egg(server: State) -> impl IntoResponse { async fn post_image(server: State, mut multipart: Multipart) -> somehow::Result { let mut image = None; let mut bright = false; + let mut algo = DitherAlgorithm::FloydSteinberg; while let Some(field) = multipart.next_field().await? { match field.name() { @@ -123,6 +125,11 @@ async fn post_image(server: State, mut multipart: Multipart) -> somehow: Some("bright") => { bright = true; } + Some("algo") => match &field.text().await? as &str { + "floyd-steinberg" => algo = DitherAlgorithm::FloydSteinberg, + "stucki" => algo = DitherAlgorithm::Stucki, + _ => {} + }, _ => {} } } @@ -133,7 +140,11 @@ async fn post_image(server: State, mut multipart: Multipart) -> somehow: let _ = server .tx - .send(Command::draw(ImageDrawing { image, bright })) + .send(Command::draw(ImageDrawing { + image, + bright, + algo, + })) .await; Ok(Redirect::to("image").into_response()) } diff --git a/showbits-thermal-printer/static/image.html b/showbits-thermal-printer/static/image.html index 2d42b3f..f7b919f 100644 --- a/showbits-thermal-printer/static/image.html +++ b/showbits-thermal-printer/static/image.html @@ -13,6 +13,13 @@
  • +
  • + Dithering algorithm: + +