use image::{ImageBuffer, Rgba};
use wgc::*;
fn main() -> anyhow::Result<()> {
use tracing_subscriber::EnvFilter;
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("debug"));
tracing_subscriber::fmt().with_env_filter(filter).init();
let item = new_item_with_picker(None)?;
let wgc = Wgc::new(item.clone(), Default::default())?;
let fitted_size = FrameSize {
width: 512,
height: 512,
};
for frame in wgc.take(1) {
let frame = frame?;
let frame_size = frame.size()?;
println!("{} {:?}", item.clone().DisplayName()?, frame_size);
let time = std::time::Instant::now();
let native = frame.pixels()?;
println!("wgc: Read {} bytes in {:?}", native.len(), time.elapsed());
save_png("target/native.png", frame_size, native)?;
let time = std::time::Instant::now();
let fitted = frame.pixels_fitted(fitted_size)?;
println!("wgc: Read {} bytes in {:?}", fitted.len(), time.elapsed());
save_png("target/fitted.png", fitted_size, fitted)?;
}
Ok(())
}
fn save_png(path: &str, size: FrameSize, pixels: Vec<u8>) -> anyhow::Result<()> {
let time = std::time::Instant::now();
let image: ImageBuffer<Rgba<u8>, Vec<u8>> =
ImageBuffer::from_raw(size.width, size.height, pixels)
.ok_or_else(|| anyhow::anyhow!("buffer does not match {size:?}"))?;
image.save(path)?;
println!(
"image: Saved to `{}` in {:?}. This can be slow in debug builds",
path,
time.elapsed()
);
Ok(())
}