[cairo] Concerns about using filters for downscaling

Owen Taylor otaylor at redhat.com
Fri Mar 21 18:37:05 PDT 2014


On Fri, 2014-03-21 at 18:33 -0400, Owen Taylor wrote:

> * For some reason, the results of downscaling images don't have
>   left-right symmetry. The result of scaling down:
> 
>   000000 000000 000000 000000 
>   000000 ffffff ffffff 000000 
>   000000 ffffff ffffff 000000 
>   000000 000000 000000 000000 
> 
>   By a factor of two is:
>  
>    646464 3c3c3c 
>    3c3c3c 242424 
> 
>   (I'm a bit suspicious about the fact that pixman generates
>   even length filters, and wonder if that has something to do
>   with the asymmetry.)

What's going on here is:

 +-------+-------+ Destination image
     *       *     Sampling points
 +---+---+---+---+ Original image
  * * * * * * * *  Subpixel filter points

So each sampling point is between two subpixel filter points, and the
picking one of them the asymmetry. When pixman has N bits of subpixel
filters, it picks the points as:

 0.5/2^N, 1.5/2^N ... (2^N-0.5)/2^N

To give an equal distribution in the unit interval. I think that's
actually wrong and they should be at:
 
 0, 1/2^N ... (N-1)/2^N

It shouldn't make a difference when the scale/offset of the filter
is arbitrary, but means that you avoid the half-way-between rounding
for exact integer scale-downs.

With more bits of subpixel precision, the asymmetry decreases - with
cairo modified to use 4 bits instead of 1, the example above is the
more reasonable:

 444444 404040
 404040 3c3c3c 

- Owen




More information about the cairo mailing list