55 lines
1.6 KiB
Rust
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(())
|
|
}
|