smears/src/main.rs

55 lines
1.6 KiB
Rust

use image::io::Reader as ImageReader;
fn main() -> anyhow::Result<()> {
if let Some(filename) = std::env::args().nth(1) {
println!("{}", filename);
let img = ImageReader::open(filename)?.decode()?;
let rimage = img.to_rgb8();
let mut all_pixels = Vec::new();
let mut prev_pixels = Vec::new();
let mut saves = 0;
for (x, y, px) in rimage.enumerate_pixels() {
if prev_pixels.len() == 600 {
save(rimage.width(), rimage.height(), &rimage, &prev_pixels, saves)?;
all_pixels.append(&mut prev_pixels);
prev_pixels.clear();
saves += 1;
}
if !all_pixels.contains(&(x, y)) {
if px[0] != 255 && px[1] != 255 && px[2] != 255 {
if rand::random() {
prev_pixels.push((x, y));
}
}
}
}
println!("{:#?}", prev_pixels);
} else {
println!("Please provide a valid filename.");
}
Ok(())
}
fn save(width: u32, height: u32, img: &image::ImageBuffer<image::Rgb<u8>, Vec<u8>>, pixels: &Vec<(u32, u32)>, iter: u32) -> anyhow::Result<()> {
let mut out = image::ImageBuffer::new(width, height);
for x in 0..width {
for y in 0..height {
let foo = image::Rgb([255, 255, 255]);
out.put_pixel(x, y, foo);
}
}
for (x, y) in pixels {
let px = img.get_pixel(*x, *y);
out.put_pixel(*x, *y, *px);
}
out.save(format!("output/{}.png", iter))?;
Ok(())
}