Pick random selections and save them to image files

This commit is contained in:
Yash Karandikar 2021-09-07 14:16:04 -05:00
parent 357ef6115a
commit b04df71879
Signed by: karx
GPG key ID: A794DA2529474BA5

View file

@ -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<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(())
}