Однако, хотя я и учусь понемногу, моих познаний все еще недостаточно для разработки алгоритмов хинтинга и контроля за отсечкой.
"Деффекты растеризации" на самом деле таковыми не являются, причина "призрачных" выступов в следующем: разрешение глифа в SVG-шрифтах - 1000 на 1000 пикселей, и когда глиф растрируется в квадрат 12 на 12 пикселов, теряется очень много деталей. Если круг 1000 на 1000 пикселов растрировать в квадрат 1 на 1 пиксел или 2 на 2 пиксела, получится либо точка, либо полностью залитый цветом квадрат. Когда разрешение квадрата 3 на 3 пиксела, то круг может стать либо квадратом, либо ромбом. Продолжая размышлять по аналогии, можно понять, что на разрешениях значительно меньше "рассчетного" векторные изображения очень сильно искажаются.
Именно из-за этих искажений так трудно сделать хороший растеризатор. На принтере разрешение 300 или 600 dpi, и можно вывести в одном дюйме букву высотой в 600 пикселов - а значит, у нее будет очень много деталей, она будет гладкой и красивой. На мониторе разрешение 72, 96 или (в лучшем случае) 120 dpi - и значит, качество букв в 3*3 (то есть девять) раз ниже. Для сравнения - различия в качестве несглаженного и сглаженного субпикселями глифа - ровно в три раза. Причина в том, что горизонтальное разрешение сглаженного субпиксельно символа в три раза выше, чем у несглаженного.
Для вывода символов хорошего качества без сглаживания применяют две технологии: одна из них называется контролем за отсечкой, а другая - хинтингом.
Суть контроля за отсечкой следующая: при уменьшении символа может получиться так, что какая-то часть буквы (например, верхняя часть буквы о) будет иметь толщину менее одного пиксела. Обычный растеризатор в таком случае превратил бы букву о в подобие буквы u, но растеризатор с контролем за отсечкой не допускает разрывов, искусственно утолщая ширину штрихов (и внося искажения, разумеется). Этот метод непрост, но более-менее реализуем.
Другой, очень популярный метод, называется хинтингом. Технология патентованная, из-за нее много ругани когда-то было. Идея следующая: формат ttf - это байт-код для интерпретатора (да-да, ttf-растеризатор это интерпретатор байт-кода языка "программирования" TrueType), и в некоторых файлах ttf содержится код, изменяющий контур символа для того, чтобы буквы лучше читались при небольших разрешениях. Этот метод дает наилучшие результаты (обратите внимание на хвостик у Q в сообщении выше - у алгоритмов без хинтинга он явно искажен, что делает результаты FreeType и моего растеризатора почти одинаковыми). "Правильный" хинтинг невозможен без TTF шрифтов (да и во многих свободных шрифтах его просто нет), а поддержку TTF я в ближайшее время делать не намерен - во-первых, есть FreeType, а во-вторых, не такой уж это простой формат. Можно попробовать сделать "автоматический" хинтинг, как это делали ранние версии FreeType.
Посмотреть, что делает хинтинг с буквами, можно вот тут например: http://habrahabr.ru/blogs/typography/112401/
Кстати, толковые вещи написаны, но над ними для Колибри еще работать и работать. Согласен с XVilka, когда есть что-то работающее, то к нему можно что-то добавить, а когда ничего нет - то и не добавишь
P.S. Буду рад любой помощи, особенно в реализации хинтинга и контроля за отсечкой.