freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Devel] Changes to the autohinter


From: Reino Ruusu
Subject: [Devel] Changes to the autohinter
Date: Sun, 17 Aug 2003 21:05:34 +0300 (EEST)

Hi. I have been working on an improved version of the autohinter this
summer. A patch against current CVS is in:
<http://www.hut.fi/u/reiska/freetype/autohint.patch>

Any comments and test results on the code are much appreciated. (I don't
have a good collection of fonts myself.)

Pictures for comparing the results are found in:
<http://www.hut.fi/u/reiska/freetype/comparison1.png>    (Trebuchet-MS)
<http://www.hut.fi/u/reiska/freetype/comparison2.png>    (StarMath)

I have implemented an iterative procedure for positioning each stem
relative to its neighbours instead of a single achor. This gives an
improvement to the symmetric properties of many difficult glyphs like '$',
'@' etc. The improvements to symmetry are most noticeable in fonts with
mathematical symbols, like StarMath.

There are many small changes and some larger ones:

New fields are added to AH_EdgeRec and AH_SegmentRec for storing pointers
and associated scores for reference edges/segments that are calculated
like the link pointers but to the other direction.

The rounding of stem positions is made relative to neighbour edges so that
the relative change of distances to neighbours is minimized instead of the
absolute displacement of the stem. This helps avoid some shape distortions
and collisions of stems in characters like '@', '©', '®' etc. at small
point sizes.

The positions of segments are taken from the straightest part of the
segment instead of an average of minimum and maximum coordinates.

I constrained the stem segments to always link to a closer segment if two
linking candidates overlap. This is necessary in e.g. Chevara, where the
simple link score is not adequate for selecting links.

Only a relative displacement is made for the edge points instead of
setting all their coordinates to the edge position. This enables use
of a looser condition for creating the segments.

Single edges are not rounded to pixel boundaries. Linking the ends of a
stem is also disabled by not creating stems with length less than half of
the width. This helps with avoiding asymmetric '+', 'T', etc.
characters. The grey pixels at the end of a long line are practically
invisible. The rounding of single edges produced some artefacts in letters
like 'c', 'a', 'e', etc.

The width of a stem is now better preserved in situations where the
adjustments would change the relative order of the edges.

There are quite many interdependent small changes, so I didn't have
time to separate them to several smaller patches.

-- 
Reino Ruusu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]