2012-04-13 11 views
5

文字列の真のバウンディングボックスをJavaで見つけることは可能ですか?つまり、実際に塗りつぶされるピクセルを含む最小の矩形ですか?Javaでテキスト文字列の真の可視サイズを見つける方法

私はFontMetricsとLineMetricsを見てきましたが、文字列を渡すことは許可されていますが、文字自体を考慮していないようです。つまり、 "a"、 "p"、 "P"同じ高さ。

具体的には、実際の文字がベースラインを下回っていなくても、文字列の高さに降下を含むように見えます。本当のバウンディングボックスを返す、私がアクセスできる他のメトリックはありますか?

また、特定の文字にディケンダーがあるかどうかを確認する方法はありますか?

+1

getAscent()、getDescent()、およびcharWidth()メソッドをチェックしましたか?詳細については、[FontMetrics](http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/FontMetrics.html)のページを参照してください。 –

答えて

4

tutorial on measuring textを参照してください。これは大きくFontMetricsに焦点を当てています。

より高度な測定(特定の文字列の境界ボックスを取得する)の場合、TextLayoutはあなたの友人のas explained hereです。

このTextLayoutのチュートリアルに加えて、javadocにはその使用例が含まれています。

+0

FontMetricsを見てきましたが、問題はheight()の値は、たとえ "a"のような文字であっても、常に降下を含むようです。だから、 "a"の周りの私の箱には手紙の下に余分なスペースがあります。 – Martin

+0

TextLayoutチュートリアルへのリンクが追加されました。 – daveb

+0

特にTextLayout.getBounds – daveb

0

javax.swing.SwingUtilities.layoutCompoundLabelを使用できます。多くのパラメータによって抑止されないでください。 2つのバージョンがあります。JComponent(nullの可能性あり)を持つバージョンは、より多くのフラグを実行します。これはJLabelに使用されているので、汎用性があり、Rectangleを生成します。

BTW「a」でも境界線にディセンダが追加される可能性があります。 GlyphVectorを使用して境界ボックスを計算することができますが、フォントヒンティングがオンになっているので、ピクセル位置が少しずれているので、いくつかの文字に累積する可能性があります。

関連する問題