From d379f4ebe6bab8963df9ee6f7d5d32f1167e576d Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sat, 24 Oct 2026 19:31:46 +0100 Subject: [PATCH] Write kernel convolution example --- examples/convolution.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 examples/convolution.rs diff --git a/examples/convolution.rs b/examples/convolution.rs new file mode 100644 index 0000000..fb34f2d --- /dev/null +++ b/examples/convolution.rs @@ -0,0 +1,38 @@ +use ccvl::{image::*, kernel::*}; + +fn main() -> std::process::ExitCode { + let args = std::env::args().collect::>(); + if args.len() != 3 { + println!("Usage: {} IN OUT", args[0].as_str()); + return std::process::ExitCode::FAILURE; + } + + let input_path = args[1].as_str(); + let output_path = args[2].as_str(); + + match Image::load::(input_path) { + Err(Error::Invalid) => { + println!("{} is not a valid image", input_path); + std::process::ExitCode::FAILURE + } + Err(Error::Io(err)) => { + println!("I/O error loading image {}: {}", input_path, err); + std::process::ExitCode::FAILURE + } + Ok(img) => { + let kernel = + [[1.0, 1.0, 1.0], [1.0, 1.0, 1.0], [1.0, 1.0, 1.0]]; + let result = kernel.convolve(&img); + match result.save::(output_path) { + Err(err) => { + println!( + "I/O error saving image {}: {}", + output_path, err + ); + std::process::ExitCode::FAILURE + } + Ok(()) => std::process::ExitCode::SUCCESS, + } + } + } +}