[cairo] Trying to figure out some rasterization problems
behdad at behdad.org
Sun Apr 21 07:18:59 PDT 2013
Long time! Comments below.
On 13-04-21 09:49 AM, David Kastrup wrote:
> a) creating a path and filling it (or clipping with it) leads to results
> that are too thin on a subpixel base.
> The PostScript/PDF imaging model is pretty clear about clip/fill
> regions: every pixel that has any part, no matter how small, inside of
> the path belongs to the region. So if I am not using strokeadjust, and
> I am stroking a path, clipping by its outline is not supposed to change
> any pixel. And using strokeadjust will only _reduce_ the area covered
> by a stroke, so again, clipping and stroking should not make a
> difference as opposed to only stroking.
You are jumping to conclusions here. What's strokeadjust? Cairo doesn't
implement PostScript/PDF exactly...
> Unfortunately, it _does_ make a difference. Why do we care? Because
> note stems are rectangles with rounded corners. Not completely circular
> stroke ends, just rounded corners. If we care for stroke adjustment
> (which we do), that means our actual shape needs to be represented as an
> intersection of a stroke-adjusted rectangle and clipping off the rounded
> corners. That clipping apparently removes too much. An easy solution
> appears to be to restroke the middle part of the rectangle without any
> clipping. Which comes to problem b) which I think Cairo might be
> responsible for:
I still have no idea what you are talking about. Perhaps some images would help?
> Now I can't figure out the strategy used by Cairo for antialiased
> rendering from the docs and code so far: is it drawing on a higher
> resolution canvas? Or is it some heuristic juggling with greyness
> levels? If the latter, what are the heuristics?
The latter. The "independence" heuristic I'd call it. Google for Porter-Duff.
More information about the cairo