feImage coordinates question

Hi,

 I've been trying to understand the feImage spec as Inkscape's rendering
of a PNG via feImage is quite different from others. So I've trace
through the spec all the relevant parts. Here is what I find:


Filter effects region:

       filterUnits = userSpaceOnUse  or objectBoundingBox (default)

       filter "hard clipped" to x, y, width height
              (default: -10%, -10%, 120%, 120%)

       primitiveUnits  = userSpaceOnUse  (default) or objectBoundingBox


Filter effects subregion (filter primitive attribute)

       filter primitive "hard clipped" to x, y, width height
              (default: 0%, 0%, 100%, 100%)

       * First weirdness: the default is specified in percent,
         i.e. objectBoundingBox, but primitiveUnits default is
         userSpaceOnUse. Shouldn't the primitiveUnits default also be
         objectBoundingBox? Why is it different from the default of
         the filter effects region? (BTW, adding primitiveUnits =
         objectBoundingBox without adding x, y, width, and height
         breaks Batik.)

feImage primitive

       Coordinate system depends on "primitiveUnits"

       Image is to be rendered according to the "image" element which
       specifies that an image is rendered by default so that it
       is centered in the specified viewport with at least two
       opposite sides touching the viewport sides.

       * Second weirdness: The coordinate system "depends on the value
         of attribute 'primitiveUnits'" which defaults to bounding box
         of the referenced object. As I read the spec it says that an
         image drawn via the feImage primitive should be drawn by
         default so that two opposite edges touch the bounding box
         (i.e. xMidYMid). This is what Inkscape does. However, Batik
         and other browsers draw the image so that two opposite edges
         touch the edges of the filter effects region.

  Inkscape's behavior makes more sense to me. The filter
  effects region is described as a way to limit CPU use in
  filter calculations. One would not expect the filter output
  to change depending on the filter effects region except for
  including or excluding area. This seems to be what the other
  filters primitives do (e.g. the feTurbulence filter pattern
  doesn't change when the filter effects region changes).

There is a test at:

     http://tavmjong.free.fr/INKSCAPE/SVG_TESTS/Filters_Image1.svg

 I would expect the images to fit in the red rectangles. Am I missing
something?

      Tav

Received on Saturday, 10 July 2010 15:47:19 UTC