diff --git a/libImaging/Resample.c b/libImaging/Resample.c index a2edf3186..e4d4e195f 100644 --- a/libImaging/Resample.c +++ b/libImaging/Resample.c @@ -176,12 +176,19 @@ precompute_coeffs(int inSize, int outSize, struct filter *filterp, k = &kk[xx * kmax]; for (x = 0; x < xmax; x++) { double w = filterp->filter((x + xmin - center + 0.5) * ss); + // We can skip extreme coefficients if they are zeroes. if (w == 0) { + // Skip from the start. if (x == 0) { + // At next loop `x` will be 0. x -= 1; + // But `w` will not be 0, because it based on `xmin`. xmin += 1; xmax -= 1; + // Prevent setting the `k[-1]` item. + continue; } else if (x == xmax - 1) { + // Truncate the last coefficient for current `xx`. xmax -= 1; } }