From 43c53555d9bf3db9bff55d96e5d4cdb0b876b734 Mon Sep 17 00:00:00 2001 From: Xiretza Date: Fri, 17 Jun 2022 21:30:30 +0200 Subject: [PATCH] feat: allow smaller images --- src/strandifier.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/strandifier.rs b/src/strandifier.rs index 59e90ea..80d256c 100644 --- a/src/strandifier.rs +++ b/src/strandifier.rs @@ -23,6 +23,9 @@ pub struct Strandifier<'a> { pixels_remaining: u32, next_x: u32, next_y: u32, + + offset_x: u32, + offset_y: u32, } impl<'a> Strandifier<'a> { @@ -41,7 +44,7 @@ impl<'a> Strandifier<'a> { image: &'a RgbImage, strand_num: u32, ) -> Result { - if layout.width_px() != image.width() || layout.height_px() != image.height() { + if layout.width_px() < image.width() || layout.height_px() < image.height() { return Err(StrandifierError::WrongDimensions); } @@ -55,6 +58,9 @@ impl<'a> Strandifier<'a> { let first_x = panel_x * layout.gang_len; let first_y = panel_y * layout.num_gangs; + let offset_x = (layout.width_px() - image.width()) / 2; + let offset_y = (layout.height_px() - image.height()) / 2; + Ok(Self { layout, image, @@ -62,6 +68,9 @@ impl<'a> Strandifier<'a> { pixels_remaining: layout.strand_len(), next_x: first_x, next_y: first_y, + + offset_x, + offset_y, }) } } @@ -98,7 +107,7 @@ impl<'a> Iterator for Strandifier<'a> { } self.pixels_remaining -= 1; - Some(*self.image.get_pixel(x, y)) + Some(*self.image.get_pixel(x + self.offset_x, y + self.offset_y)) } fn size_hint(&self) -> (usize, Option) {