From dcd978378c452335163874a7618b9e2490e00d96 Mon Sep 17 00:00:00 2001 From: Radzivon Bartoshyk Date: Sat, 11 Apr 2026 20:43:35 +0100 Subject: [PATCH 1/2] fixes --- Cargo.lock | 1 - Cargo.toml | 5 ----- 2 files changed, 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aecdae3..7c09382 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -168,7 +168,6 @@ dependencies = [ "erydanos", "half", "num-traits", - "rayon", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 37eb986..c8f1161 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,8 +20,3 @@ rust-version = "1.89.0" erydanos = "0.2" half = "2.6" num-traits = "0.2" -rayon = { version = "1.10", optional = true } - -[features] -default = ["rayon"] -rayon = ["dep:rayon"] From f3ac6f0b700f83256434a4a2b0fc6bb7b0c7e02c Mon Sep 17 00:00:00 2001 From: Radzivon Bartoshyk Date: Sat, 11 Apr 2026 21:06:19 +0100 Subject: [PATCH 2/2] Buffer api improvements --- src/app/src/main.rs | 24 ++++++------------------ src/buffer.rs | 33 ++++++--------------------------- src/concat_alpha.rs | 16 ++++++++-------- src/hsv_to_image.rs | 11 +++++------ src/image_to_xyz_lab.rs | 35 ++++++++++++++--------------------- src/image_xyza_laba.rs | 3 +-- src/jzazbz_to_image.rs | 7 +++---- src/linear_to_image.rs | 7 +++---- src/linear_to_image_u8.rs | 3 +-- src/linear_to_planar.rs | 5 ++--- src/planar_to_linear.rs | 5 ++--- src/sigmoidal_to_image.rs | 9 ++++----- src/xyz_lab_to_image.rs | 33 ++++++++++++++++----------------- 13 files changed, 71 insertions(+), 120 deletions(-) diff --git a/src/app/src/main.rs b/src/app/src/main.rs index dd8508a..8f90875 100644 --- a/src/app/src/main.rs +++ b/src/app/src/main.rs @@ -68,15 +68,9 @@ fn main() { let src_stride = width * components as u32; let start_time = Instant::now(); rgba_to_oklab( - &ImageBuffer::new(src_bytes, width, height, src_stride, 4).unwrap(), - &mut ImageBufferMut::new( - BufferStore::Borrowed(&mut lab_store), - width, - height, - src_stride, - 4, - ) - .unwrap(), + &ImageBuffer::new(src_bytes, width, height, 4).unwrap(), + &mut ImageBufferMut::new(BufferStore::Borrowed(&mut lab_store), width, height, 4) + .unwrap(), TransferFunction::Srgb, ) .unwrap(); @@ -106,15 +100,9 @@ fn main() { let start_time = Instant::now(); oklab_to_rgba( - &ImageBuffer::new(&lab_store, width, height, src_stride, 4).unwrap(), - &mut ImageBufferMut::new( - BufferStore::Borrowed(&mut dst_slice), - width, - height, - src_stride, - 4, - ) - .unwrap(), + &ImageBuffer::new(&lab_store, width, height, 4).unwrap(), + &mut ImageBufferMut::new(BufferStore::Borrowed(&mut dst_slice), width, height, 4) + .unwrap(), TransferFunction::Srgb, ) .unwrap(); diff --git a/src/buffer.rs b/src/buffer.rs index 528140c..233276b 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -24,21 +24,9 @@ impl<'a, F: Sized> ImageBuffer<'a, F> where [F]: ToOwned>, { - pub fn new( - data: &'a [F], - width: u32, - height: u32, - stride: u32, - channels: u32, - ) -> Result { + pub fn new(data: &'a [F], width: u32, height: u32, channels: u32) -> Result { let min_stride = width * channels; - if stride < min_stride { - return Err(ColorError::StrideTooNarrow { - min: min_stride, - given: stride, - }); - } - let required = stride as usize * height as usize; + let required = min_stride as usize * height as usize; if data.len() < required { return Err(ColorError::BufferTooSmall { expected: required, @@ -49,7 +37,7 @@ where data: Cow::Borrowed(data), width, height, - stride, + stride: min_stride, channels, }) } @@ -58,17 +46,9 @@ where data: Vec, width: u32, height: u32, - stride: u32, channels: u32, ) -> Result { - let min_stride = width * channels; - if stride < min_stride { - return Err(ColorError::StrideTooNarrow { - min: min_stride, - given: stride, - }); - } - let required = stride as usize * height as usize; + let required = width as usize * channels as usize * height as usize; if data.len() < required { return Err(ColorError::BufferTooSmall { expected: required, @@ -79,7 +59,7 @@ where data: Cow::Owned(data), width, height, - stride, + stride: width * channels, channels, }) } @@ -205,14 +185,13 @@ impl<'a, F: Copy + Debug + Sized> ImageBufferMut<'a, F> { data: BufferStore<'a, F>, width: u32, height: u32, - stride: u32, channels: u32, ) -> Result { let buf = Self { data, width, height, - stride, + stride: width * channels, channels, }; buf.validate()?; diff --git a/src/concat_alpha.rs b/src/concat_alpha.rs index ee75fe1..a192872 100644 --- a/src/concat_alpha.rs +++ b/src/concat_alpha.rs @@ -73,19 +73,19 @@ mod tests { let data = (0..stride * height) .map(|i| (i as f32) / (stride * height) as f32) .collect::>(); - ImageBuffer::from_vec(data, width, height, stride, 3).unwrap() + ImageBuffer::from_vec(data, width, height, 3).unwrap() } fn make_alpha(width: u32, height: u32, fill: f32) -> ImageBuffer<'static, f32> { let stride = width; let data = vec![fill; (stride * height) as usize]; - ImageBuffer::from_vec(data, width, height, stride, 1).unwrap() + ImageBuffer::from_vec(data, width, height, 1).unwrap() } fn make_dst(width: u32, height: u32) -> ImageBufferMut<'static, f32> { let stride = width * 4; let data = BufferStore::Owned(vec![0f32; (stride * height) as usize]); - ImageBufferMut::new(data, width, height, stride, 4).unwrap() + ImageBufferMut::new(data, width, height, 4).unwrap() } #[test] @@ -124,8 +124,8 @@ mod tests { #[test] fn works_with_single_pixel() { - let src = ImageBuffer::new(&[0.1f32, 0.2, 0.3], 1, 1, 3, 3).unwrap(); - let alpha = ImageBuffer::new(&[0.9f32], 1, 1, 1, 1).unwrap(); + let src = ImageBuffer::new(&[0.1f32, 0.2, 0.3], 1, 1, 3).unwrap(); + let alpha = ImageBuffer::new(&[0.9f32], 1, 1, 1).unwrap(); let mut dst = make_dst(1, 1); append_alpha(&src, &mut dst, &alpha).unwrap(); @@ -143,7 +143,7 @@ mod tests { fn rejects_src_with_wrong_channel_count() { let stride = 4; let data = vec![0f32; (stride * 1) as usize]; - let src = ImageBuffer::new(data.leak(), 1, 1, stride, 4).unwrap(); + let src = ImageBuffer::new(data.leak(), 1, 1, 4).unwrap(); let alpha = make_alpha(1, 1, 1.0); let mut dst = make_dst(1, 1); @@ -157,7 +157,7 @@ mod tests { let alpha = make_alpha(1, 1, 1.0); let stride = 3; let data = BufferStore::Owned(vec![0f32; (stride * 1) as usize]); - let mut dst = ImageBufferMut::new(data, 1, 1, stride, 3).unwrap(); + let mut dst = ImageBufferMut::new(data, 1, 1, 3).unwrap(); let err = append_alpha(&src, &mut dst, &alpha).unwrap_err(); assert!(matches!(err, ColorError::Generic(_))); @@ -168,7 +168,7 @@ mod tests { let src = make_src(1, 1); let stride = 2; let data = vec![0f32; (stride * 1) as usize]; - let alpha = ImageBuffer::new(data.leak(), 1, 1, stride, 2).unwrap(); + let alpha = ImageBuffer::new(data.leak(), 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1); let err = append_alpha(&src, &mut dst, &alpha).unwrap_err(); diff --git a/src/hsv_to_image.rs b/src/hsv_to_image.rs index 9f2d885..7a87246 100644 --- a/src/hsv_to_image.rs +++ b/src/hsv_to_image.rs @@ -202,7 +202,7 @@ mod tests_hsv_u16_to_channels { height: u32, channels: u32, ) -> ImageBuffer<'static, u16> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, u8> { @@ -210,7 +210,6 @@ mod tests_hsv_u16_to_channels { BufferStore::Owned(vec![0u8; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() @@ -553,28 +552,28 @@ mod tests_hsv_u16_to_channels { #[test] fn hsv_rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(hsv_to_rgb(&src, &mut dst, SCALE).is_err()); } #[test] fn hsv_rgba_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 4); assert!(hsv_to_rgba(&src, &mut dst, SCALE).is_err()); } #[test] fn hsl_rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(hsl_to_rgb(&src, &mut dst, SCALE).is_err()); } #[test] fn hsl_rgba_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0u16; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 4); assert!(hsl_to_rgba(&src, &mut dst, SCALE).is_err()); } diff --git a/src/image_to_xyz_lab.rs b/src/image_to_xyz_lab.rs index aa49d9b..ae91ad4 100644 --- a/src/image_to_xyz_lab.rs +++ b/src/image_to_xyz_lab.rs @@ -242,7 +242,7 @@ pub fn rgb_to_xyz( channels_to_xyz::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -268,7 +268,7 @@ pub fn bgr_to_xyz( channels_to_xyz::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -292,7 +292,7 @@ pub fn srgb_to_xyz( channels_to_xyz::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, &SRGB_TO_XYZ_D65, TransferFunction::Srgb, ) @@ -318,7 +318,7 @@ pub fn rgb_to_lab( channels_to_xyz::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Lab as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -344,7 +344,7 @@ pub fn rgba_to_xyz( channels_to_xyz::<{ ImageConfiguration::Rgba as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -368,7 +368,7 @@ pub fn srgba_to_xyz( channels_to_xyz::<{ ImageConfiguration::Rgba as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, &SRGB_TO_XYZ_D65, TransferFunction::Srgb, ) @@ -533,7 +533,7 @@ pub fn bgr_to_lab( channels_to_xyz::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Lab as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -559,7 +559,7 @@ pub fn rgb_to_luv( channels_to_xyz::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Luv as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -585,7 +585,7 @@ pub fn bgr_to_luv( channels_to_xyz::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Luv as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -611,7 +611,7 @@ pub fn rgb_to_lch( channels_to_xyz::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Lch as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -637,7 +637,7 @@ pub fn bgr_to_lch( channels_to_xyz::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Lch as u8 }>( src, dst, - &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1, 1)?, + &mut ImageBufferMut::new(BufferStore::Owned(vec![0.; 1]), 1, 1, 1)?, matrix, transfer_function, ) @@ -648,24 +648,17 @@ mod tests { use super::*; fn make_src(data: Vec, width: u32, height: u32, channels: u32) -> ImageBuffer<'static, u8> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, f32> { let len = (width * height * channels) as usize; - ImageBufferMut::new( - BufferStore::Owned(vec![0f32; len]), - width, - height, - width * channels, - channels, - ) - .unwrap() + ImageBufferMut::new(BufferStore::Owned(vec![0f32; len]), width, height, channels).unwrap() } fn make_alpha(width: u32, height: u32) -> ImageBufferMut<'static, f32> { let len = (width * height) as usize; - ImageBufferMut::new(BufferStore::Owned(vec![0f32; len]), width, height, width, 1).unwrap() + ImageBufferMut::new(BufferStore::Owned(vec![0f32; len]), width, height, 1).unwrap() } // ── helpers ─────────────────────────────────────────────────────────────── diff --git a/src/image_xyza_laba.rs b/src/image_xyza_laba.rs index fe35f75..78aed12 100644 --- a/src/image_xyza_laba.rs +++ b/src/image_xyza_laba.rs @@ -419,7 +419,7 @@ mod tests_with_alpha { // ── helpers ─────────────────────────────────────────────────────────────── fn make_src(data: Vec, width: u32, height: u32, channels: u32) -> ImageBuffer<'static, u8> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, f32> { @@ -427,7 +427,6 @@ mod tests_with_alpha { BufferStore::Owned(vec![0f32; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() diff --git a/src/jzazbz_to_image.rs b/src/jzazbz_to_image.rs index 2867523..756e17a 100644 --- a/src/jzazbz_to_image.rs +++ b/src/jzazbz_to_image.rs @@ -365,7 +365,7 @@ mod tests_jzazbz_to_image { height: u32, channels: u32, ) -> ImageBuffer<'static, f32> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, u8> { @@ -373,7 +373,6 @@ mod tests_jzazbz_to_image { BufferStore::Owned(vec![0u8; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() @@ -814,14 +813,14 @@ mod tests_jzazbz_to_image { #[test] fn rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(jzazbz_to_rgb(&src, &mut dst, LUMINANCE, TransferFunction::Srgb).is_err()); } #[test] fn rgba_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 4); assert!(jzazbz_to_rgba(&src, &mut dst, LUMINANCE, TransferFunction::Srgb).is_err()); } diff --git a/src/linear_to_image.rs b/src/linear_to_image.rs index 6c5cd49..55e4a1a 100644 --- a/src/linear_to_image.rs +++ b/src/linear_to_image.rs @@ -185,7 +185,7 @@ mod tests_linear_f32_to_gamma { height: u32, channels: u32, ) -> ImageBuffer<'static, f32> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, u8> { @@ -193,7 +193,6 @@ mod tests_linear_f32_to_gamma { BufferStore::Owned(vec![0u8; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() @@ -496,14 +495,14 @@ mod tests_linear_f32_to_gamma { #[test] fn rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 4], 1, 1, 4, 4).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 4], 1, 1, 4).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(linear_to_rgb(&src, &mut dst, TransferFunction::Srgb).is_err()); } #[test] fn rgba_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 3], 1, 1, 3, 3).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 3], 1, 1, 3).unwrap(); let mut dst = make_dst(1, 1, 4); assert!(linear_to_rgba(&src, &mut dst, TransferFunction::Srgb).is_err()); } diff --git a/src/linear_to_image_u8.rs b/src/linear_to_image_u8.rs index 83dbb57..a03818d 100644 --- a/src/linear_to_image_u8.rs +++ b/src/linear_to_image_u8.rs @@ -165,7 +165,7 @@ mod tests_linear_u8_to_gamma { use crate::BufferStore; fn make_src(data: Vec, width: u32, height: u32, channels: u32) -> ImageBuffer<'static, u8> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, u8> { @@ -173,7 +173,6 @@ mod tests_linear_u8_to_gamma { BufferStore::Owned(vec![0u8; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() diff --git a/src/linear_to_planar.rs b/src/linear_to_planar.rs index 6cd7944..a93df45 100644 --- a/src/linear_to_planar.rs +++ b/src/linear_to_planar.rs @@ -72,7 +72,7 @@ mod tests_linear_to_gamma { use crate::BufferStore; fn make_src(data: Vec, width: u32, height: u32) -> ImageBuffer<'static, f32> { - ImageBuffer::from_vec(data, width, height, width, 1).unwrap() + ImageBuffer::from_vec(data, width, height, 1).unwrap() } fn make_dst(width: u32, height: u32) -> ImageBufferMut<'static, u8> { @@ -80,7 +80,6 @@ mod tests_linear_to_gamma { BufferStore::Owned(vec![0u8; (width * height) as usize]), width, height, - width, 1, ) .unwrap() @@ -202,7 +201,7 @@ mod tests_linear_to_gamma { #[test] fn rejects_multi_channel_src() { // channels=3 is not 1 → must error - let src = ImageBuffer::from_vec(vec![0f32; 3], 1, 1, 3, 3).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 3], 1, 1, 3).unwrap(); let mut dst = make_dst(1, 1); let result = linear_to_plane(&src, &mut dst, TransferFunction::Srgb); assert!(result.is_err()); diff --git a/src/planar_to_linear.rs b/src/planar_to_linear.rs index d5b96c7..4ccdd29 100644 --- a/src/planar_to_linear.rs +++ b/src/planar_to_linear.rs @@ -69,7 +69,7 @@ mod tests_plane_to_linear { use crate::BufferStore; fn make_src(data: Vec, width: u32, height: u32) -> ImageBuffer<'static, u8> { - ImageBuffer::from_vec(data, width, height, width, 1).unwrap() + ImageBuffer::from_vec(data, width, height, 1).unwrap() } fn make_dst(width: u32, height: u32) -> ImageBufferMut<'static, f32> { @@ -77,7 +77,6 @@ mod tests_plane_to_linear { BufferStore::Owned(vec![0f32; (width * height) as usize]), width, height, - width, 1, ) .unwrap() @@ -234,7 +233,7 @@ mod tests_plane_to_linear { #[test] fn rejects_multi_channel_src() { - let src = ImageBuffer::from_vec(vec![0u8; 3], 1, 1, 3, 3).unwrap(); + let src = ImageBuffer::from_vec(vec![0u8; 3], 1, 1, 3).unwrap(); let mut dst = make_dst(1, 1); assert!(plane_to_linear(&src, &mut dst, TransferFunction::Srgb).is_err()); } diff --git a/src/sigmoidal_to_image.rs b/src/sigmoidal_to_image.rs index 5285876..f82f575 100644 --- a/src/sigmoidal_to_image.rs +++ b/src/sigmoidal_to_image.rs @@ -165,7 +165,7 @@ mod tests_sigmoidal_to_image { height: u32, channels: u32, ) -> ImageBuffer<'static, f32> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, u8> { @@ -173,7 +173,6 @@ mod tests_sigmoidal_to_image { BufferStore::Owned(vec![0u8; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() @@ -445,21 +444,21 @@ mod tests_sigmoidal_to_image { #[test] fn rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(sigmoidal_to_rgb(&src, &mut dst).is_err()); } #[test] fn rgba_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 4); assert!(sigmoidal_to_rgba(&src, &mut dst).is_err()); } #[test] fn bgra_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 4); assert!(sigmoidal_to_bgra(&src, &mut dst).is_err()); } diff --git a/src/xyz_lab_to_image.rs b/src/xyz_lab_to_image.rs index 7844aa7..605d3f5 100644 --- a/src/xyz_lab_to_image.rs +++ b/src/xyz_lab_to_image.rs @@ -193,7 +193,7 @@ pub fn xyz_to_rgb( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, @@ -209,7 +209,7 @@ pub fn xyz_to_bgr( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, @@ -223,7 +223,7 @@ pub fn xyz_to_srgb( src: &ImageBuffer<'_, f32>, dst: &mut ImageBufferMut<'_, u8>, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Xyz as u8 }>( src, dst, @@ -239,7 +239,7 @@ pub fn lab_to_rgb( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Lab as u8 }>( src, dst, @@ -255,7 +255,7 @@ pub fn lab_to_bgr( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Lab as u8 }>( src, dst, @@ -269,7 +269,7 @@ pub fn lab_to_srgb( src: &ImageBuffer<'_, f32>, dst: &mut ImageBufferMut<'_, u8>, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Lab as u8 }>( src, dst, @@ -315,7 +315,7 @@ pub fn luv_to_rgb( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Luv as u8 }>( src, dst, @@ -331,7 +331,7 @@ pub fn luv_to_bgr( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Luv as u8 }>( src, dst, @@ -347,7 +347,7 @@ pub fn lch_to_rgb( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Rgb as u8 }, false, { XyzTarget::Lch as u8 }>( src, dst, @@ -363,7 +363,7 @@ pub fn lch_to_bgr( matrix: &[[f32; 3]; 3], transfer_function: TransferFunction, ) -> Result<(), ColorError> { - let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1, 1)?; + let empty = ImageBuffer::from_vec(vec![0.; 1], 1, 1, 1)?; xyz_to_channels::<{ ImageConfiguration::Bgr as u8 }, false, { XyzTarget::Lch as u8 }>( src, dst, @@ -384,7 +384,7 @@ mod tests_xyz_to_channels { height: u32, channels: u32, ) -> ImageBuffer<'static, f32> { - ImageBuffer::from_vec(data, width, height, width * channels, channels).unwrap() + ImageBuffer::from_vec(data, width, height, channels).unwrap() } fn make_dst(width: u32, height: u32, channels: u32) -> ImageBufferMut<'static, u8> { @@ -392,14 +392,13 @@ mod tests_xyz_to_channels { BufferStore::Owned(vec![0u8; (width * height * channels) as usize]), width, height, - width * channels, channels, ) .unwrap() } fn make_alpha(data: Vec, width: u32, height: u32) -> ImageBuffer<'static, f32> { - ImageBuffer::from_vec(data, width, height, width, 1).unwrap() + ImageBuffer::from_vec(data, width, height, 1).unwrap() } fn assert_approx(a: u8, b: u8, eps: u8, label: &str) { @@ -922,28 +921,28 @@ mod tests_xyz_to_channels { #[test] fn xyz_to_rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(xyz_to_rgb(&src, &mut dst, &XYZ_TO_SRGB_D65, TransferFunction::Srgb).is_err()); } #[test] fn lab_to_rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(lab_to_rgb(&src, &mut dst, &XYZ_TO_SRGB_D65, TransferFunction::Srgb).is_err()); } #[test] fn luv_to_rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(luv_to_rgb(&src, &mut dst, &XYZ_TO_SRGB_D65, TransferFunction::Srgb).is_err()); } #[test] fn lch_to_rgb_rejects_wrong_channel_count() { - let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2, 2).unwrap(); + let src = ImageBuffer::from_vec(vec![0f32; 2], 1, 1, 2).unwrap(); let mut dst = make_dst(1, 1, 3); assert!(lch_to_rgb(&src, &mut dst, &XYZ_TO_SRGB_D65, TransferFunction::Srgb).is_err()); }