i didnt say im fancy fixing it
All checks were successful
Rust / build (pull_request) Successful in 8m21s

there is an off by one somewhere _shrug_
This commit is contained in:
Vinzenz Schroeter 2025-05-04 16:19:25 +02:00
parent 6a5af6b4f4
commit 33fa110c65
2 changed files with 18 additions and 5 deletions

View file

@ -1,6 +1,7 @@
//! Based on https://github.com/WarkerAnhaltRanger/CCCB_Ledwand //! Based on https://github.com/WarkerAnhaltRanger/CCCB_Ledwand
use image::GrayImage; use image::GrayImage;
use log::debug;
use servicepoint::{Bitmap, DisplayBitVec, PIXEL_HEIGHT}; use servicepoint::{Bitmap, DisplayBitVec, PIXEL_HEIGHT};
type GrayHistogram = [usize; 256]; type GrayHistogram = [usize; 256];
@ -173,6 +174,7 @@ pub(crate) fn ostromoukhov_dither(source: GrayImage, bias: u8) -> Bitmap {
for y in 0..height as usize { for y in 0..height as usize {
let start = y * width as usize; let start = y * width as usize;
let last_row = y == (height - 1) as usize;
if y % 2 == 0 { if y % 2 == 0 {
for x in start..start + width as usize { for x in start..start + width as usize {
ostromoukhov_dither_pixel( ostromoukhov_dither_pixel(
@ -180,7 +182,7 @@ pub(crate) fn ostromoukhov_dither(source: GrayImage, bias: u8) -> Bitmap {
&mut destination, &mut destination,
x, x,
width as usize, width as usize,
y == (height - 1) as usize, last_row,
1, 1,
bias, bias,
); );
@ -192,7 +194,7 @@ pub(crate) fn ostromoukhov_dither(source: GrayImage, bias: u8) -> Bitmap {
&mut destination, &mut destination,
x, x,
width as usize, width as usize,
y == (height - 1) as usize, last_row,
-1, -1,
bias, bias,
); );
@ -217,8 +219,16 @@ fn ostromoukhov_dither_pixel(
destination.set(position, destination_value); destination.set(position, destination_value);
let mut diffuse = |to: usize, mat: i16| { let mut diffuse = |to: usize, mat: i16| {
let diffuse_value = source[to] as i16 + mat; match source.get(to) {
source[to] = diffuse_value.clamp(u8::MIN.into(), u8::MAX.into()) as u8; None => {
// 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;
source[to] = diffuse_value.clamp(u8::MIN.into(), u8::MAX.into()) as u8;
}
};
}; };
let lookup = if destination_value { let lookup = if destination_value {
@ -229,11 +239,14 @@ fn ostromoukhov_dither_pixel(
diffuse((position as isize + direction) as usize, lookup[0]); diffuse((position as isize + direction) as usize, lookup[0]);
if !last_row { if !last_row {
debug!("begin");
diffuse( diffuse(
((position + width) as isize - direction) as usize, ((position + width) as isize - direction) as usize,
lookup[1], lookup[1],
); );
debug!("mit");
diffuse(((position + width) as isize) as usize, lookup[2]); diffuse(((position + width) as isize) as usize, lookup[2]);
debug!("end");
} }
} }

View file

@ -7,7 +7,7 @@ use crate::{
}; };
use clap::Parser; use clap::Parser;
use log::debug; use log::debug;
use servicepoint::{Brightness, HardResetCommand, UdpSocketExt}; use servicepoint::{Brightness, HardResetCommand};
mod brightness; mod brightness;
mod cli; mod cli;