Растеризация данных глифов символов TrueType

У меня есть данные глифов символов из таблицы глифов в файле шрифта TrueType.
Эти данные представлены в виде блока десятичных чисел.

Пример: символ 'a' в Calibri 11pt (Glyph Index 258)

0209225523736332020510640176643215663166476631192352121217752161317752241117752161516176521841247641403939150112016151770581842552401791217758184255232179131775818425523217911177581842552321801516176581842864201723197052165225919252105215252466542184127641520834134344292344674612201277404763237632371857479323717185747931139493237147225434343431964394935747162254343434350574948949337206635343838535366353446253526225151535246235341423534462535262451503022173534142212022515054553631628272631145914581711158145621161681051242249785761977349128129472766861025297136843816414168100663189806511161241212661212906370377010265761127437705280532729352981625152529263529194485126841962345634170836668

Какие есть возможности нарисовать этого персонажа на экране?


person Jonas Anseeuw    schedule 26.04.2012    source источник
comment
хороший вопрос. Я сделал быстрый поиск и не смог найти никакой полезной информации об этом. Надеюсь, у кого-нибудь будет ответ на этот вопрос в stackoverflow.   -  person juFo    schedule 26.04.2012


Ответы (1)


Краткий ответ: не делайте этого сами. Используйте библиотеку рендеринга шрифтов, например freetype, или, если вы работаете на платформе, на которой уже есть рендерер шрифтов, используйте ее. . Существует также ряд коммерческих библиотек рендеринга.

Подробный ответ: спецификацию данных для декодирования данных глифов в кривые (плюс, при необходимости, инструкции) можно найти здесь. Так что можете начать с этого. Но вам понадобится гораздо, гораздо больше... Вам также потребуется как минимум разобрать таблицы "head" и "hhea", чтобы знать, где размещать элементы и как масштабировать единицы проекта в пространстве чертежа. Затем вам нужно будет проанализировать таблицы «fpgm», «cvt» и «prep», которые содержат «глобальные» (для всего шрифта) инструкции (иногда называемые «подсказками»). Затем вам нужно проанализировать инструкции, присутствующие в каждом глифе, а затем разработать процедуру заполнения, чтобы использовать всю эту информацию для размещения отдельных пикселей. Удачи! Это не для слабонервных или тех, кто ищет быстрое решение. Используйте библиотеку.

person djangodude    schedule 29.04.2012