dithr 0.3.0

Buffer-first rust dithering and halftoning library.
Documentation
pub mod block;
pub mod classic;
pub(crate) mod core;
pub mod extended;
pub mod variable;

use crate::{
    core::{PixelLayout, Sample},
    data::ErrorKernel,
    Buffer, QuantizeMode, Result,
};

pub use block::block_error_diffusion_in_place;
pub use classic::{
    atkinson_in_place, burkes_in_place, false_floyd_steinberg_in_place, floyd_steinberg_in_place,
    jarvis_judice_ninke_in_place, sierra_in_place, sierra_lite_in_place, stevenson_arce_in_place,
    stucki_in_place, two_row_sierra_in_place,
};
pub use extended::{fan_in_place, shiau_fan_2_in_place, shiau_fan_in_place};
pub use variable::{
    adaptive_vector_error_diffusion_in_place, feature_preserving_msed_in_place,
    gradient_based_error_diffusion_in_place, green_noise_msed_in_place,
    hierarchical_error_diffusion_in_place, hvs_optimized_error_diffusion_in_place,
    linear_pixel_shuffling_in_place, mbvq_color_error_diffusion_in_place,
    multichannel_green_noise_error_diffusion_in_place, multiscale_error_diffusion_in_place,
    neugebauer_color_error_diffusion_in_place, ostromoukhov_in_place,
    semivector_error_diffusion_in_place, structure_aware_error_diffusion_in_place,
    tone_dependent_error_diffusion_in_place, vector_error_diffusion_in_place, zhou_fang_in_place,
};

#[doc(hidden)]
pub(crate) fn error_diffuse_in_place<S: Sample, L: PixelLayout>(
    buffer: &mut Buffer<'_, S, L>,
    mode: QuantizeMode<'_, S>,
    kernel: &ErrorKernel,
) -> Result<()> {
    core::error_diffuse_in_place(buffer, mode, kernel)
}