diff --git a/src/ledwand_dither.rs b/src/ledwand_dither.rs index 9f3a634..c1caed4 100644 --- a/src/ledwand_dither.rs +++ b/src/ledwand_dither.rs @@ -1,7 +1,7 @@ //! Based on https://github.com/WarkerAnhaltRanger/CCCB_Ledwand use image::GrayImage; -use log::error; +use log::debug; use servicepoint::{Bitmap, DisplayBitVec, PIXEL_HEIGHT}; type GrayHistogram = [usize; 256]; @@ -174,6 +174,7 @@ pub(crate) fn ostromoukhov_dither(source: GrayImage, bias: u8) -> Bitmap { for y in 0..height as usize { let start = y * width as usize; + let last_row = y == (height - 1) as usize; if y % 2 == 0 { for x in start..start + width as usize { ostromoukhov_dither_pixel( @@ -181,7 +182,7 @@ pub(crate) fn ostromoukhov_dither(source: GrayImage, bias: u8) -> Bitmap { &mut destination, x, width as usize, - y == (height - 1) as usize, + last_row, 1, bias, ); @@ -193,7 +194,7 @@ pub(crate) fn ostromoukhov_dither(source: GrayImage, bias: u8) -> Bitmap { &mut destination, x, width as usize, - y == (height - 1) as usize, + last_row, -1, bias, ); @@ -220,7 +221,8 @@ fn ostromoukhov_dither_pixel( let mut diffuse = |to: usize, mat: i16| { match source.get(to) { None => { - error!("ostromoukhov_dither_pixel - invalid index {to}"); + // last row has a out of bounds error on the last pixel + // TODO fix the iter bounds instead of ignoring here } Some(val) => { let diffuse_value = *val as i16 + mat; @@ -237,11 +239,14 @@ fn ostromoukhov_dither_pixel( diffuse((position as isize + direction) as usize, lookup[0]); if !last_row { + debug!("begin"); diffuse( ((position + width) as isize - direction) as usize, lookup[1], ); + debug!("mit"); diffuse(((position + width) as isize) as usize, lookup[2]); + debug!("end"); } }