#[cfg(feature = "eink")] pub mod display; pub mod imageproc; use crate::display::Wrapper; use crate::imageproc::{DiffusionMatrix, EInkBuffer, ErrorDiffusionDither, Ditherer}; use clap::{Parser, Subcommand}; use image::RgbImage; /// Display images over #[derive(Debug, Parser)] #[command(version, about)] struct Cli { #[command(subcommand)] command: Command, } #[derive(Debug, Subcommand)] enum Command { /// Load a single image Show, /// Display a test pattern Test, /// Start the HTTP sever Serve, /// Convert an image and save it. Convert, } fn main() -> anyhow::Result<()> { let cli = Cli::parse(); println!("CLI {cli:?}"); if matches!(cli.command, Command::Show) { let img: RgbImage = image::io::Reader::open("myimage.png")?.decode()?.into(); let mut display = Wrapper::new()?; let mut eink_buf = EInkBuffer::new(800, 480); let dither = ErrorDiffusionDither::new(DiffusionMatrix::Atkinson); dither.dither(&img, &mut eink_buf); let raw_buf = eink_buf.into_display_buffer(); display.display(&raw_buf)?; } if matches!(cli.command, Command::Test) { let mut display = Wrapper::new()?; display.test()?; } if matches!(cli.command, Command::Convert) { let img: RgbImage = image::io::Reader::open("myimage.png")?.decode()?.into(); let mut eink_buf = EInkBuffer::new(800, 480); let dither = ErrorDiffusionDither::new(DiffusionMatrix::Atkinson); dither.dither(&img, &mut eink_buf); let raw_buf = eink_buf.into_display_buffer(); } Ok(()) }