use std::path::{Path, PathBuf};
use std::process::exit;
use image::DynamicImage;
use maps_io_ros::{ColorMap, Meta, load_image, save_image};
fn filename(path: &Path) -> &str {
path.file_name()
.and_then(|s| s.to_str())
.unwrap_or("unknown")
}
fn demo(meta_path: &Path) -> maps_io_ros::Result<()> {
let meta = Meta::load_from_file(meta_path)?;
println!(
"Loaded map metadata: {:?} (image path: {:?})",
meta_path, meta.image_path
);
let img = load_image(&meta.image_path)?;
println!("Loaded map image from {:?}", meta.image_path);
let mut img_rgba = DynamicImage::from(img.to_rgba8());
let colormap = ColorMap::RvizMap;
println!("Applying value interpretation with colormap {colormap:?}");
meta.value_interpretation
.with_colormap(colormap)
.apply(&mut img_rgba, img.has_alpha());
let out_path = std::env::temp_dir().join("processed_".to_owned() + filename(&meta.image_path));
println!("Saved processed image to {out_path:?}");
save_image(&out_path, &img_rgba)?;
Ok(())
}
fn main() {
let meta_path = PathBuf::from(std::env::args().nth(1).unwrap_or_else(|| {
eprintln!("Usage: demo <map.yaml>");
exit(1);
}));
#[cfg(debug_assertions)]
println!("You're running the demo in debug mode! Expect poor performance.");
if let Err(e) = demo(&meta_path) {
eprintln!("{e}");
exit(1);
}
}