Blurs pixels. This is way to slow. Need to SIMD or maybe OpenCV
This commit is contained in:
37
src/main.rs
37
src/main.rs
@@ -32,14 +32,20 @@ fn surrounding_pixels(x: u32, y: u32, img: &DynamicImage) -> Vec<image::Rgba<u8>
|
||||
|
||||
if img.in_bounds(x+1, y+1) {pixels.push(img.get_pixel(x+1, y+1))}
|
||||
if img.in_bounds(x+1, y) {pixels.push(img.get_pixel(x+1, y))}
|
||||
if img.in_bounds(x+1, y-1) {pixels.push(img.get_pixel(x+1, y-1))}
|
||||
|
||||
if img.in_bounds(x, y+1) {pixels.push(img.get_pixel(x, y+1))}
|
||||
if img.in_bounds(x, y-1) {pixels.push(img.get_pixel(x, y-1))}
|
||||
|
||||
if x > 0 {
|
||||
if img.in_bounds(x-1, y+1) {pixels.push(img.get_pixel(x-1, y+1))}
|
||||
if img.in_bounds(x-1, y) {pixels.push(img.get_pixel(x-1, y))}
|
||||
}
|
||||
|
||||
if y > 0 {
|
||||
if img.in_bounds(x+1, y-1) {pixels.push(img.get_pixel(x+1, y-1))}
|
||||
if img.in_bounds(x, y-1) {pixels.push(img.get_pixel(x, y-1))}
|
||||
if x > 0 {
|
||||
if img.in_bounds(x - 1, y - 1) { pixels.push(img.get_pixel(x - 1, y - 1)) }
|
||||
}
|
||||
}
|
||||
|
||||
pixels
|
||||
}
|
||||
@@ -49,24 +55,35 @@ fn main() {
|
||||
let mut img = image::open("test.jpg").unwrap();
|
||||
let xy = img.dimensions();
|
||||
|
||||
println!("Starting");
|
||||
for x in 0..xy.0 {
|
||||
for y in 0..xy.1 {
|
||||
let mut pixel = img.get_pixel(x, y);
|
||||
|
||||
let v = surrounding_pixels(x, y, &img);
|
||||
|
||||
// let mut avg: Pixel;
|
||||
//
|
||||
// for p in v {
|
||||
// avg += p;
|
||||
// }
|
||||
let mut avg = v.first().unwrap().clone();
|
||||
|
||||
pixel.data[0] = 1;
|
||||
for p in v {
|
||||
let r: u16 = (avg.data[0] as u16 + p.data[0] as u16);
|
||||
let g: u16 = (avg.data[1] as u16 + p.data[1] as u16);
|
||||
let b: u16 = (avg.data[2] as u16 + p.data[2] as u16);
|
||||
let a: u16 = (avg.data[3] as u16 + p.data[3] as u16);
|
||||
avg.data[0] = (r/2) as u8;
|
||||
avg.data[1] = (g/2) as u8;
|
||||
avg.data[2] = (b/2) as u8;
|
||||
avg.data[3] = (a/2) as u8;
|
||||
}
|
||||
|
||||
pixel.data[0] = avg.data[0];
|
||||
pixel.data[1] = avg.data[1];
|
||||
pixel.data[2] = avg.data[2];
|
||||
pixel.data[3] = avg.data[3];
|
||||
|
||||
img.put_pixel(x, y, pixel);
|
||||
}
|
||||
}
|
||||
|
||||
println!("Ending");
|
||||
img.save("fractal.png").unwrap();
|
||||
|
||||
let mut window = RenderWindow::new(
|
||||
|
||||
Reference in New Issue
Block a user