В чем разница между FontMetrics.stringWidth() и FontMetrics.getStringBounds()?

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

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


person Domchi    schedule 15.08.2011    source источник
comment
См. также этот in-aj/5998117#5998117">Вопросы и ответы.   -  person trashgod    schedule 15.08.2011


Ответы (2)


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

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

person Ted Hopp    schedule 15.08.2011

Думаю, ответ в вашем вопросе. Из javadocs:

stringWidth

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

person Joel    schedule 15.08.2011