From 618d6ac4e9a023e33450205d7fad78a5fd7abdfc Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 30 Jul 2023 18:59:36 +0200 Subject: [PATCH] Add util module --- src/bw.rs | 11 +++++------ src/lib.rs | 1 + src/util.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/util.rs diff --git a/src/bw.rs b/src/bw.rs index 079fc41..9a70757 100644 --- a/src/bw.rs +++ b/src/bw.rs @@ -1,6 +1,8 @@ use image::RgbaImage; use palette::{Hsl, Hsv, IntoColor, Lab, LinSrgb, Oklab, Srgb}; +use crate::util; + #[derive(Clone, Copy, PartialEq, Eq)] pub enum Method { SrgbAverage, @@ -51,11 +53,8 @@ impl Method { pub fn bw(image: &mut RgbaImage, method: Method) { for pixel in image.pixels_mut() { - let [r, g, b, _] = pixel.0; - let srgb = Srgb::new(r, g, b).into_format::(); - let srgb = method.to_bw(srgb).into_format::(); - pixel.0[0] = srgb.red; - pixel.0[1] = srgb.green; - pixel.0[2] = srgb.blue; + let srgb = util::pixel_to_srgb(*pixel); + let srgb = method.to_bw(srgb); + util::update_pixel_with_srgb(pixel, srgb); } } diff --git a/src/lib.rs b/src/lib.rs index 6771b8d..d06b29c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,3 +10,4 @@ #![warn(clippy::use_self)] pub mod bw; +mod util; diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..9ffe421 --- /dev/null +++ b/src/util.rs @@ -0,0 +1,28 @@ +use image::Rgba; +use palette::{IntoColor, Srgb}; + +pub fn pixel_to_srgb(pixel: Rgba) -> Srgb { + let [r, g, b, _] = pixel.0; + Srgb::new(r, g, b).into_format::() +} + +pub fn update_pixel_with_srgb(pixel: &mut Rgba, srgb: Srgb) { + let srgb = srgb.into_format::(); + pixel.0[0] = srgb.red; + pixel.0[1] = srgb.green; + pixel.0[2] = srgb.blue; +} + +pub fn pixel_to_color(pixel: Rgba) -> C +where + Srgb: IntoColor, +{ + pixel_to_srgb(pixel).into_color() +} + +pub fn update_pixel_with_color(pixel: &mut Rgba, color: C) +where + C: IntoColor, +{ + update_pixel_with_srgb(pixel, color.into_color()) +}