[cairo] Re: fix pixel offsets in rotated image sources

Bill Spitzak spitzak at d2.com
Fri Sep 16 15:00:34 PDT 2005



Bertram Felgenhauer wrote:

> It's right that this works on the matrix level; note, however, that the
> translation by -.5, -.5 is only correct for bilinear filtering; for
> 'nearest' filtering you should leave that out, as I tried to explain
> in my previous mail.

I would think it works for "nearest" filtering as well. It certainly 
works for the identity, 90 degree rotations, and integer scales, but I 
can't test others. A "nearest" filter is a spike, while bilinear is a 
triangle. Both are symmetric so I would think they would work the same.

> I wonder how many applications there are that rely on the current
> behaviour of Xrender like that, i.e. if it's safe to fix that in the Xserver.

I would suspect this would be a bad idea as it would break software that 
is already compensating for it, such as my software and Cairo.

>>Note that 0x10000 is 1.0 in XRender matrix integers and >>1 is a 
>>divide-by-2.
> 
> cairo/pixman uses (IntToxFixed(1)) to get the appropriate value for 1.
> Note that >>1 is not guaranteed to work for negative integers.

Unfortunately /2 rounds toward zero, which is equally broken. This 
produces visible artifacts such as 1-pixel shifts as arbitrary 
calculations pass through zero. Shift rounds down always. I don't think 
there are any machines powerful enough to run Cairo that do not do 
signed shifts correctly.


More information about the cairo mailing list