10.1.1 Finding pixel outlines

The first step in the conversion from a character shape represented as a
bitmap to a list of mathematical curves is to find all the cyclical
outlines (i.e., closed curves) in the bitmap image. The resulting list
is called a pixel outline list. Each pixel outline in the
list consists of the pixel coordinates of each edge on the outline.

For example, the pixel outline list for an `i' has two elements:
one for the dot, and one for the stem. The pixel outline list for an
`o' also has two elements: one for the outside of the shape, and
one for the inside.

But we must differentiate between an outside outline (whose
interior is to be filled with black to render the character) and an
inside outline (whose interior is to be filled with white).
Limn's convention is to write the pixel coordinates for outside outlines
in counterclockwise order, and those for inside outlines in clockwise
order.

This counterclockwise movement of outside outlines is required by the
Type 1 format used for PostScript fonts, which is why we adopted that
convention for Limn.

For example, consider a pixel outline consisting of a single black pixel
at the origin. The pixel has four corners, and hence the outline will
have four coordinates. Limn looks for starting pixels from top to
bottom, left to right, within a bitmap image. Thus, the list of pixel
coordinates will start at (0,1) and proceed counterclockwise: (0,0)
(1,0) (1,1). Here is a picture:

start => (0,1)<-(1,1)
| ^
v |
(0,0)->(0,1)

Because finding pixel outlines does not involve approximation or
estimation, there are no options to control the process. Put another
way, Limn will always find the correct pixel coordinates for each
outline.

Once these pixel outlines have been found, each is then processed
independently; i.e., all the remaining steps, described in the following
sections, operate on each pixel outline individually.