I believe the problem is that we are flip flopping between vertical
first and horizontal first in the resampling passes, based on the area
of the intermediate representation. The horizontal and vertical passes
are very different speed on Panther. Vertical is much slower. The
speed
difference is greatly improved on Tiger. We used the one with the
larger intermediate area. It may be we should reexamine that decision.
IIRC, Graphics Gems recommends to do that pass first which reduces the
number of pixels the most (for speed reasons). If I am not mistaken,
the
theoretical accuracy (if you were to compute with infinite precision)
does
not suffer from such a choice, at least for some common resampling
filters. With finite precision it does make a tiny difference, I think.
I believe we made that choice because of the bottleneck problem which
more generally affects Affine Warps. Since the special case of Scale is
completely orthogonal I think there is little or no image quality gain
from maximizing area. We'll check to make sure first before switching
it though.
Does the API provide means to select a speed/accuracy balance? It
might be
better to leave this decision to the programmer on a case by case basis
rather than make it statically in the library.
Generally speaking static libraries are not an option for this kind of
thing. We could decide based on use of the kvImageHighQualityResampling
flag if it turns out to be important.