55 lines
1.1 KiB
Rust
55 lines
1.1 KiB
Rust
use address::Host;
|
|
use std::path::PathBuf;
|
|
|
|
use image::ImageReader;
|
|
|
|
use clap::Parser;
|
|
|
|
mod flutr;
|
|
mod pixelmsgs;
|
|
|
|
use flutr::FlutR;
|
|
use pixelmsgs::Add;
|
|
use pixelmsgs::PixelMsgs;
|
|
|
|
#[derive(Parser, Debug)]
|
|
#[command(version, about, long_about = None)]
|
|
struct Args {
|
|
image_path: PathBuf,
|
|
host: Host,
|
|
|
|
#[arg(short, long, default_value_t = 1234)]
|
|
port: u16,
|
|
}
|
|
|
|
fn main() {
|
|
let args = Args::parse();
|
|
|
|
let pixel_msgs = parse_image_to_msgs(&args.image_path);
|
|
|
|
let mut flutr = FlutR::new(args.host, args.port, pixel_msgs).unwrap();
|
|
flutr.flut();
|
|
}
|
|
|
|
fn parse_image_to_msgs(path: &PathBuf) -> PixelMsgs {
|
|
let mut result = PixelMsgs::default();
|
|
|
|
let image_result = parse_image(path);
|
|
|
|
let image = match image_result {
|
|
Ok(img) => img,
|
|
Err(err) => panic!("Error reading image! {err}"),
|
|
};
|
|
|
|
let rgb_image = image.into_rgb8();
|
|
for pixel in rgb_image.enumerate_pixels() {
|
|
result.add(pixel);
|
|
}
|
|
|
|
result
|
|
}
|
|
|
|
fn parse_image(path: &PathBuf) -> Result<image::DynamicImage, image::error::ImageError> {
|
|
ImageReader::open(path)?.with_guessed_format()?.decode()
|
|
}
|