[cairo] [PATCH] Revert "image: Use convolution filters for sample reconstruction when downscaling"
Bill Spitzak
spitzak at gmail.com
Fri May 16 15:49:21 PDT 2014
On 05/13/2014 01:15 AM, Uli Schlachter wrote:
> This reverts commit fb57ea13e04d82866cbc8e86c83261148bb3e231.
>
> When running cairo-test-suite with the parameter "-a", it also runs each test
> with a non-zero device-offset and device-scaling. The above commit influenced
> the device-scaling results badly. E.g. some test results ended up with a black
> border at the top-most and left-most row that looked like there was an offset of
> "0.5" in drawing the image and thus pixels outside of the image were sampled.
There should be a workaround for this! Reverting proper scaling is not
the solution.
Obviously there are bugs in pixman. It sounds like it is transforming
the corner of the input filter to the corner of the output filter,
rather than the centers. This can be fixed by modifying the transform to
compensate.
The other thing is that there should be exactly one filter in each
direction. As far as I can tell that means that one of "reconstruct" and
"sampling" must be IMPULSE. I am still completely mystified as to what
pixman is thinking here and have not been able to figure out which is
which. The attached code certainly can allow both filters to be
non-impulse which is a bug.
> - * TODO: this approach may not be completely correct if the matrix
> - * contains a skew component. */
> - scale_x = hypot (pattern->matrix.xx, pattern->matrix.yx);
> - scale_y = hypot (pattern->matrix.yx, pattern->matrix.yy);
This is in fact the best value you can get for a skew matrix (or for a
rotation). Anything better requires sampling where the two filter axis
are not parallel to the source image axis.
More information about the cairo
mailing list