[cairo] Non-antialiased rendering in image surface

M Joonas Pihlaja jpihlaja at cc.helsinki.fi
Sat Jun 26 11:37:56 PDT 2010


On Sat, 26 Jun 2010, cu wrote:

> I see. That's unfortunate. I use non-antialiased rendering for certain
> objects when it's important that their edges match perfectly (without a
> thin line that seems to appear when fill is made in antialiased mode).

Non-antialiased line rendering by cairo looks rather gnarly for 
anything but vertical and horizontal lines, so please don't get your 
hopes up.  For pure vertical and horizontal lines you can get equally 
sharp edges by using an identity user-to-device transform, a line 
width of 1.0, and stroke input coordinates which are exactly at pixel 
centres.  The technique is explained in more detail here: 
http://cairographics.org/FAQ/#sharp_lines

The principles behind http://cairographics.org/FAQ/#sharp_lines are at 
play even in non-antialiased rendering, so you'll want to mind them 
even then.  Ignoring the advice about using half-pixel centres as your 
line coordinates puts you at the mercy of rounding rules at the very 
edges of stroked lines, so your line may be shifted by one pixel 
left/right/top/bottom next time cairo or pixman is updated, or 
*shudder* your width=1.0 line might even turn out as a width=2.0 line!
So while using non-antialiased rendering might seem like it's more 
robust as to the sharpness of lines, it's not really any better than 
being mindful of your input coordinates and transforms, and might in 
fact be a little worse.

Cheers,

Joonas


More information about the cairo mailing list