Pick random selections and save them to image files
This commit is contained in:
parent
357ef6115a
commit
b04df71879
52
src/main.rs
52
src/main.rs
|
@ -7,34 +7,48 @@ fn main() -> anyhow::Result<()> {
|
||||||
let img = ImageReader::open(filename)?.decode()?;
|
let img = ImageReader::open(filename)?.decode()?;
|
||||||
let rimage = img.to_rgb8();
|
let rimage = img.to_rgb8();
|
||||||
|
|
||||||
|
let mut all_pixels = Vec::new();
|
||||||
let mut prev_pixels = Vec::new();
|
let mut prev_pixels = Vec::new();
|
||||||
|
let mut saves = 0;
|
||||||
for (x, y, px) in rimage.enumerate_pixels() {
|
for (x, y, px) in rimage.enumerate_pixels() {
|
||||||
if px[0] != 255 && px[1] != 255 && px[2] != 255 {
|
if prev_pixels.len() == 600 {
|
||||||
if rand::random() {
|
save(rimage.width(), rimage.height(), &rimage, &prev_pixels, saves)?;
|
||||||
prev_pixels.push((x, y));
|
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);
|
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 {
|
} else {
|
||||||
println!("Please provide a valid filename.");
|
println!("Please provide a valid filename.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
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(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue