}
}
}
+ /*
+ * Now look for edge hints, preferring ones closer to the edge
+ * of the character.
+ */
+ for (int i = 0; i < nstems - 1; i++)
+ if (aedges[i] > 0 && hints[i] == hint_none &&
+ (i == 0 || hints[i-1] == hint_none))
+ hints[i] = hint_aedge;
+ for (int i = nstems - 1; i >= 1; i--)
+ if (zedges[i] > 0 && hints[i] == hint_none &&
+ (i == nstems - 1 || hints[i+1] == hint_none))
+ hints[i] = hint_zedge;
+ printf("<!-- HINTS ");
+ for (int i = 0; i < nstems; i++) printf("%c", ".|[]"[hints[i]]);
+ printf(" -->");
}
static void
#define DL GETPIX(x-1, y+1)
#define DR GETPIX(x+1, y+1)
- for (x = 0; x < XSIZE; x++) vstems[x] = 0;
- for (y = 0; y < YSIZE; y++) hstems[y] = 0;
+ for (x = 0; x < XSIZE; x++) vstems[x] = ledges[x] = redges[x] = 0;
+ for (y = 0; y < YSIZE; y++) hstems[y] = tedges[y] = bedges[y] = 0;
clearpath();
for (y = 0; y < YSIZE; y++) {
for (x = 0; x < XSIZE; x++) {
blackpixel(x, YSIZE - y - 1, bl, br, tr, tl);
if (!L && !R && (U || D))
vstems[x]++;
- else if (!U && !D && (L || R))
+ if (!U && !D && (L || R))
hstems[y]++;
- else if (UL + U + UR + L + R + DL + D + DR == 0)
+ if (UL + U + UR + L + R + DL + D + DR == 0)
vstems[x]++, hstems[y]++;
- else { /* Not a stem. Maybe an edge? */
- if (UL + U + UR == 0) tedges[y]++;
- if (DL + D + DR == 0) bedges[y]++;
- if (UL + L + DL == 0) ledges[x]++;
- if (UR + R + DR == 0) redges[x]++;
- }
+ if (UL + U + UR == 0) tedges[y]++;
+ if (DL + D + DR == 0) bedges[y]++;
+ if (UL + L + DL == 0) ledges[x]++;
+ if (UR + R + DR == 0) redges[x]++;
} else {
bool tl, tr, bl, br;