diff --git a/src/imageops/sample.rs b/src/imageops/sample.rs index 4d62cc610c..6bf6334fba 100644 --- a/src/imageops/sample.rs +++ b/src/imageops/sample.rs @@ -893,12 +893,10 @@ where let max = S::DEFAULT_MAX_VALUE; let max: f32 = NumCast::from(max).unwrap(); - #[allow(clippy::redundant_guards)] - let sum = match kernel.iter().fold(0.0, |s, &item| s + item) { - x if x == 0.0 => 1.0, - sum => sum, + let inverse_sum = match kernel.iter().sum() { + 0.0 => 1.0, + sum => 1.0 / sum, }; - let sum = (sum, sum, sum, sum); for y in 1..height - 1 { for x in 1..width - 1 { @@ -908,7 +906,6 @@ where // Only a subtract and addition is needed for pixels after the first // in each row. for (&k, &(a, b)) in kernel.iter().zip(taps.iter()) { - let k = (k, k, k, k); let x0 = x as isize + a; let y0 = y as isize + b; @@ -924,13 +921,18 @@ where NumCast::from(k4).unwrap(), ); - t.0 += vec.0 * k.0; - t.1 += vec.1 * k.1; - t.2 += vec.2 * k.2; - t.3 += vec.3 * k.3; + t.0 += vec.0 * k; + t.1 += vec.1 * k; + t.2 += vec.2 * k; + t.3 += vec.3 * k; } - let (t1, t2, t3, t4) = (t.0 / sum.0, t.1 / sum.1, t.2 / sum.2, t.3 / sum.3); + let (t1, t2, t3, t4) = ( + t.0 * inverse_sum, + t.1 * inverse_sum, + t.2 * inverse_sum, + t.3 * inverse_sum, + ); #[allow(deprecated)] let t = Pixel::from_channels(