5

画面に描かれているテキストの幅を見つける必要があります。このスレッドは、FontMetrics.stringWidth()がFontMetrics.getStringBounds()ほど正確でない場合があることを示唆しています。

これが正しいかどうか、そして正しい場合は、どのコンテキストでこの違いが見えるかを誰かが知っていますか?FontMetrics.stringWidth()は、SwingUtilities.computeStringWidth()を含め、より頻繁に使用されるようです。また、明らかな利点は、Graphicsオブジェクトを必要としないことですが、これ自体が、アンチエイリアスおよび同様の設定がGraphicsオブジェクトで定義されているという事実と組み合わされて、FontMetrics.getStringBounds()がより正確である理由を説明する可能性があります。

4

2 に答える 2

6

getStringBoundsグラフィックスが渡されるため、操作する情報が多くなります。これを使用して、サブピクセルのグリフ配置を計算し、グリフサイズに対するアンチエイリアシングの影響を考慮することができます。FontRenderContextのドキュメントから:

アプリケーションによって指定されたアンチエイリアシングおよびフラクショナルメトリックも、ピクセル境界に丸められるため、文字のサイズに影響を与える可能性があります。

于 2011-08-15T02:05:24.750 に答える
4

答えはあなたの質問にあると思います。javadocsから:

stringWidth

このメソッドから返される合計アドバンス幅は、レンダリングコンテキストを考慮していないことに注意してください。したがって、アンチエイリアシングとフラクショナルメトリックのヒントは、アドバンスの値に影響を与える可能性があります。アンチエイリアシングとフラクショナルメトリックのヒントを有効にする場合は、このメソッドの代わりにgetStringBounds(String、Graphics)を使用してください。文字列の前進は、必ずしもその文字の前進の合計ではありません。

于 2011-08-15T02:00:33.240 に答える