2012-03-06 5 views
1

Java(Graphics2D)の文字列/文字を、指定されたサイズの矩形に正確に合わせるようにスケールする方法を教えてもらえますか?内部)?内部の長方形に合わせるJavaのスケール文字列

これは私がこれまで持っているものです。

String s = "S"; // always a single character! 
Rectangle rect = getRect(); // defines the desired size and position 
AffineTransform transform = new AffineTransform(); 
transform.setToTranslation(rect.getX(), rect.getY()); 
transform.scale(rect.getWidth()/(double) fm.stringWidth(s), 
       rect.getHeight()/(double) fm.getAscent()); 
FontRenderContext frc = image.getFontRenderContext(); 
TextLayout tl = new TextLayout(s, g2d.getFont(), frc); 
Shape shape = tl.getOutline(transform); 
g2d.setClip(shape); 
g2d.fill(shape.getBounds()); 

私はこのコードを実行している問題は、文字列が長方形がおよそのサイズに合わせてスケーリングされているが、それは、まさにすなわち、それに適合していないということです。それは内部からの矩形の境界に触れません(これは私がしたいものです!)。

別のフォントを使用するのに役立ちますか?私は現在、モノスペースフォントを使用しています。 または、スケーリングを異なる方法で行う必要がありますか?

ありがとうございました!

+0

なぜSwingのようなグラフィックスフレームワークを使用しないのですか? –

+0

私は、Webアプリケーション用の画像を描画しています。Swingを使って簡単に解決する方法はありますか? – Tobieh

+0

申し訳ありませんが、私は十分に質問を読んでいませんでした。私はボックスの端に正確に触れるためには、個々の文字間隔で遊ばなければならないと思います。 –

答えて

3

私は私がやりたいする方法を考え出した、と私はそれを共有するかもしれないと思った:

私の主な問題は、異なる文字の高さだったので、代わりに、フォントのアセントを使用して、私はその使用アウトラインの最大値と最小値のY座標を使用して高さを計算します。下記参照。

String s = "S"; // always a single character! 
Rectangle rect = getRect(); // defines the desired size and position 
FontMetrics fm = g2d.getFontMetrics(); 
FontRenderContext frc = g2d.getFontRenderContext(); 
TextLayout tl = new TextLayout(s, g2d.getFont(), frc); 
AffineTransform transform = new AffineTransform(); 
transform.setToTranslation(rect.getX(), rect.getY()); 
double scaleY = 
    rect.getHeight()/(double) (tl.getOutline(null).getBounds().getMaxY() 
           - tl.getOutline(null).getBounds().getMinY()); 
transform.scale(rect.getWidth()/(double) fm.stringWidth(s), scaleY); 
Shape shape = tl.getOutline(transform); 
g2d.setClip(shape); 
g2d.fill(shape.getBounds()); 

似たような問題を持つ人に役立つことを願っています。