i didnt say im fancy fixing it
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Rust / build (pull_request) Successful in 8m21s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Rust / build (pull_request) Successful in 8m21s
				
			there is an off by one somewhere _shrug_
This commit is contained in:
		
							parent
							
								
									6a5af6b4f4
								
							
						
					
					
						commit
						33fa110c65
					
				
					 2 changed files with 18 additions and 5 deletions
				
			
		| 
						 | 
					@ -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");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue