Неравномерное масштабирование текста в Skia (админка FreeType 2)

Моя проблема заключается в том, что во время плавного масштабирования, применяемого к холсту Skia (с методом concat), текст масштабируется «всплесками», неравномерно. Проблема особенно очевидна на платформе Android с серверной частью FreeType 2.

Я считаю, что именно так работает общее масштабирование текста в Skia - сначала примените размер текста к движку шрифта, затем извлеките растровое изображение глифа и преобразуйте его с помощью «остаточной» матрицы для достижения желаемого конечного размера. Но почему-то не применяется окончательное оставшееся масштабирование, что приводит к таким рывкам при переходе между целыми значениями размера текста. То же самое с чистым холстом Java/Android работает безупречно (текст плавно масштабируется).

Мой вопрос в том, как я могу исправить это поведение? Может быть, есть какой-то флаг конфигурации сборки, который я мог бы настроить, может быть, SkPaint флаг времени выполнения?

Ревизия Skia m59.


person Vsevolod Ganin    schedule 19.09.2017    source источник


Ответы (2)


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

float scale = someValue;
int someOtherVar = scale;
... some scaling math on someOtherVar...
text.setScale(someOtherVar)

Это приведет к описанному поведению

Никогда не преобразовывайте переменные масштабирования в целые до самого последнего шага.

person NapkinTrout    schedule 24.09.2017
comment
Спасибо. Это определенно не тот случай, потому что любая другая геометрия на холсте масштабируется правильно и плавно. И я не применяю никакого дополнительного масштаба к тексту или что-то в этом роде. - person Vsevolod Ganin; 25.09.2017

При рисовании текста попробуйте установить Paint.isLinearText. Это заставляет Skia отображать текст в пути перед применением преобразований. Мое тестирование показывает, что это приводит к тому, что масштабирование становится плавным.

person Alexander Dorokhine    schedule 30.04.2020