В чем разница между FontMetrics.stringWidth () и FontMetrics.getStringBounds ()? - PullRequest
5 голосов
/ 15 августа 2011

Мне нужно найти ширину текста, который рисуется на экране. Этот поток предполагает, что FontMetrics.stringWidth () иногда не будет столь же точным, как FontMetrics.getStringBounds ().

Кто-нибудь знает, верно ли это, и если да, то в какомв контексте это различие видно?Кажется, что FontMetrics.stringWidth () используется чаще, в том числе в SwingUtilities.computeStringWidth ().Кроме того, очевидным преимуществом является то, что ему не требуется объект Graphics, но это само по себе в сочетании с тем фактом, что сглаживание и аналогичные параметры определены в объекте Graphics, может объяснить, почему FontMetrics.getStringBounds () может быть более точным.

Ответы [ 2 ]

6 голосов
/ 15 августа 2011

getStringBounds имеет больше информации для работы, так как ему передается Графика.Он может использовать это для вычисления размещения субпиксельных глифов и для учета влияния сглаживания на размеры глифов.Из документации для FontRenderContext :

Сглаживание и дробные метрики, указанные приложением, также могут влиять на размер символа из-за округления до границ пикселей.

4 голосов
/ 15 августа 2011

Я думаю, что ответ на ваш вопрос.Из javadocs:

stringWidth

Обратите внимание, что общая ширина продвижения, возвращаемая этим методом, не учитывает контекст рендеринга.Таким образом, намеки на сглаживание и дробные метрики могут влиять на величину аванса.При включении подсказок сглаживания и дробных метрик вместо этого метода используйте getStringBounds (String, Graphics).Продвижение строки не обязательно является суммой достижений ее символов.

...