From c370ac4b923766c21ff1d9ec20836a4831c369d8 Mon Sep 17 00:00:00 2001 From: "A. Molzer" <5550310+197g@users.noreply.github.com> Date: Sat, 19 Jul 2025 00:12:43 +0200 Subject: [PATCH] Take row stride input in chunk bytes --- src/decoder/mod.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs index 0587385..1228335 100644 --- a/src/decoder/mod.rs +++ b/src/decoder/mod.rs @@ -907,23 +907,23 @@ impl Decoder { chunk_index: u32, output_width: usize, ) -> TiffResult<()> { - self.read_chunk_to_bytes(buffer.as_bytes_mut(), chunk_index, output_width) + let output_row_stride = (output_width as u64) + .saturating_mul(self.image.samples_per_pixel() as u64) + .saturating_mul(self.image.bits_per_sample as u64) + .div_ceil(8); + + self.read_chunk_to_bytes(buffer.as_bytes_mut(), chunk_index, output_row_stride) } fn read_chunk_to_bytes( &mut self, buffer: &mut [u8], chunk_index: u32, - output_width: usize, + output_row_stride: u64, ) -> TiffResult<()> { let offset = self.image.chunk_file_range(chunk_index)?.0; self.goto_offset_u64(offset)?; - let output_row_stride = (output_width as u64) - .saturating_mul(self.image.samples_per_pixel() as u64) - .saturating_mul(self.image.bits_per_sample as u64) - / 8; - self.image.expand_chunk( &mut self.value_reader, buffer, @@ -1030,7 +1030,13 @@ impl Decoder { let extent = self.result_extent(data_dims.0 as usize, data_dims.1 as usize)?; extent.assert_layout(buffer.len())?; - self.read_chunk_to_bytes(buffer, chunk_index, data_dims.0 as usize)?; + + let output_row_stride = u64::from(data_dims.0) + .saturating_mul(self.image.samples_per_pixel() as u64) + .saturating_mul(self.image.bits_per_sample as u64) + .div_ceil(8); + + self.read_chunk_to_bytes(buffer, chunk_index, output_row_stride)?; Ok(()) }