Можно ли получить точные метрики символов/шрифтов в AS3?

Я создал класс, который будет использовать встроенный шрифт для динамического создания растрового шрифта во время выполнения. Пока это работает хорошо, за исключением того, что у меня есть небольшая проблема с интервалом между символами.

На изображении ниже первая строка представляет собой фактический TextField, а вторая была визуализирована с использованием сгенерированного растрового шрифта.

Пример проблемы с межсимвольным интервалом

Если вы посмотрите на слово «лиса» или на «эд» в слове «прыгнул», вы увидите, что расстояние между буквами выглядит немного странно.

Существуют ли какие-либо альтернативы классу TextLineMetrics, которые дадут мне более точные метрики персонажа?

ОБНОВЛЕНИЕ:

Качество рендеринга текста с использованием нового Flash Text Engine:

Качество рендеринга текста с использованием нового текстового движка Flash

ОБНОВЛЕНИЕ 2:

Случайно я в конце концов нашел решение:

Первой проблемой было свойство antiAliasType, которому было присвоено значение AntiAliasType.ADVANCED.
Хотя оно создает текст более высокого качества, оно также приводит к тому, что TextLineMetrics возвращает неправильную ширину символов.

Во-вторых, его тоже нужно было округлить (используя Math.ceil) до ближайшего пикселя, а не вниз.


person cmann    schedule 12.01.2012    source источник
comment
Может быть, это просто проблема округления. Вы пытались округлить значение пикселя вверх или вниз? (или если вы их уже округляете, вы пробовали их не округлять?)   -  person laurent    schedule 12.01.2012
comment
Да, я округлил положение до целых пикселей, и теперь я попытался не округлять их, но это не имело значения, а только приводило к тому, что символы становились размытыми.   -  person cmann    schedule 13.01.2012


Ответы (1)


TextField слишком тяжел для этого. flash.text.engine будет лучше работать для создания растровых изображений

person Guan Yuxin    schedule 13.01.2012
comment
Пока это выглядит хорошо; использование TextlineMetrics.width возвращает несогласованную ширину, хотя я использую моноширинный шрифт, но использование FTE и TextLine.textWidth или TextLine.getAtomBounds будет правильно возвращать одинаковую ширину для всех символов. Единственная проблема, которую я обнаружил, заключается в том, что, по моему мнению, качество встроенного текста FTE плохое, я включил другое изображение, чтобы продемонстрировать проблему - итоговая строка выглядит нечеткой по сравнению с другими методами. Есть ли способ контролировать качество сглаживания с помощью FTE? - person cmann; 13.01.2012