2

したがって、SOに関する同様の質問とは少し異なりますが、アフライン変換を使用してテキスト文字列を縮小または拡大し、全体のサイズが描画される領域に比例するようにする方法についての洞察はありますか?

たとえば、フォントを領域の幅の 50% にしたいと思います。

このようなコードをいくつか継承しましたが、それが何をしているのかよくわかりません

Font font = new Font("Arial", Font.BOLD, 12);
FontRenderContext context = graphics.getFontRenderContext();
graphics.setFont(font);
Rectangle2D bounds = graphics.getFont().getStringBounds("Hello world", context);

LineMetrics line = font.getLineMetrics(text, context);
float xScale = (float) (region.width / bounds.getWidth());
float yScale = (region.height / (line.getAscent() + line.getDescent()));

double x = region.x;
double y = region.y + region.height - (yScale * line.getDescent());
AffineTransform transformation = AffineTransform.getTranslateInstance(x, y);

if (xScale > yScale)
    transformation.scale(yScale, yScale);
else
    transformation.scale(xScale, xScale);

graphics.setFont(font.deriveFont(transformation));
graphics.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);

int centerX = region.width / 2;
int centerY = region.height / 2;
graphics.drawString(text, centerX, centerY - (int) bounds.getHeight());

サイズを妥当なものに設定しているようですが、これを地域の中心に置いていません。何をしようとしているのかを明らかにすることができれば、それは素晴らしいことです。

任意のポインタ (Java フォント チュートリアルへの文字通りのポインタでない限り) は大歓迎です。

4

1 に答える 1