From b04df718795623dd2c6a7bfecbc0aebf9bd777ec Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Tue, 7 Sep 2021 14:16:04 -0500 Subject: [PATCH] Pick random selections and save them to image files --- src/main.rs | 52 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/src/main.rs b/src/main.rs index df3e681..f6cb8e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,34 +7,48 @@ fn main() -> anyhow::Result<()> { 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 px[0] != 255 && px[1] != 255 && px[2] != 255 { - if rand::random() { - prev_pixels.push((x, y)); + 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); - - let mut out = image::ImageBuffer::new(rimage.width(), rimage.height()); - - for x in 0..rimage.width() { - for y in 0..rimage.height() { - let foo = image::Rgb([255, 255, 255]); - out.put_pixel(x, y, foo); - } - } - - for (x, y) in &prev_pixels { - let px = rimage.get_pixel(*x, *y); - out.put_pixel(*x, *y, *px); - } - - out.save("output.png")?; } else { println!("Please provide a valid filename."); } Ok(()) } + +fn save(width: u32, height: u32, img: &image::ImageBuffer, Vec>, 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(()) +}