use image::{RgbImage, RgbaImage};
use ispc_downsampler::{downsample_with_custom_scale, AlbedoFormat, Image};
use stb_image::image::{load, LoadResult};
use std::path::Path;
use std::time::Instant;
fn main() {
let res = load(Path::new("test_assets/square_test.png"));
match res {
LoadResult::Error(str) => panic!("Image loading error: {}", str),
LoadResult::ImageU8(img) => {
assert!(!img.data.is_empty());
let src_fmt = if img.data.len() / (img.width * img.height) == 4 {
AlbedoFormat::Rgba8Unorm
} else {
AlbedoFormat::Rgb8Unorm
};
println!("Loaded image!");
let src_img = Image::new(&img.data, img.width as u32, img.height as u32, src_fmt);
let target_width = (img.width / 2) as u32;
let target_height = (img.height / 2) as u32;
let now = Instant::now();
println!("Downsampling started!");
let downsampled_pixels =
downsample_with_custom_scale(&src_img, target_width, target_height, 1.0);
println!("Finished downsampling in {:.2?}!", now.elapsed());
std::fs::create_dir_all("example_outputs").unwrap();
match src_fmt {
AlbedoFormat::Rgba8Unorm => {
let save_image =
RgbaImage::from_vec(target_width, target_height, downsampled_pixels)
.unwrap();
save_image
.save("example_outputs/square_test_result.png")
.unwrap()
}
AlbedoFormat::Rgb8Unorm => {
let save_image =
RgbImage::from_vec(target_width, target_height, downsampled_pixels)
.unwrap();
save_image
.save("example_outputs/square_test_result.png")
.unwrap()
}
_ => panic!("Unexpected format encountered."),
}
}
_ => panic!("This test only works with 8-bit per channel textures"),
}
}