Java2D(Graphics2D)での拡大/縮小について

2021/02/13 05:00

いろいろと調べていたら、簡単にできるんですね。

参考にさせていただいたページです。

【Java】アフィン変換で画像などを回転させる / のんぽぐさん
https://nompor.com/2017/12/08/post-1695/

アフィン変換で画像などを回転させる / のんぽぐさん

----------
Graphics2D g2 = (Graphics2D) g;

AffineTransform at = g2.getTransform();

at.setToScale(scaleX, scaleY);
g2.setTransform(at);

----------

こんな簡単にできるんですね。知らなかった(笑)

paintメソッド内で、上記を考慮すれば、scaleX と scaleY (double型)の倍率でいけます。
いやいや。簡単だった(笑)(汗)

画像を拡大/縮小した時に、見た目のイメージを調整できるようです。

(2026/01/18追加)

1. 「パキッ!」としたドット絵を守る(Nearest Neighbor)

----------
// 補間をしない設定
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
----------

2. 「滑らか」に今風の質感を出す(Bilinear / Bicubic)

「高解像度のイラストや、写真をきれいに拡大・縮小したい場合はこちら」

----------
// 滑らかにする設定
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
----------

メリット: エッジが馴染み、ボヤけが自然になる。
デメリット: 補間計算が入るため、ごくわずかにCPU負荷が増える(が、現代のPCなら問題なし)。

3. 【エンジニアの作法】Transformの保存と復元

「拡大処理をすると、その後に描く文字なども全部大きくなってしまいます。描き終わったら元に戻すのがお作法です」

----------
// 1. 今の状態をメモ
AffineTransform old = g2.getTransform();

// 2. 拡大を設定して描画(ここで設定を上書き)
at.setToScale(scaleX, scaleY);
g2.setTransform(at);
/* ここで描画処理を行う */

// 3. 描き終わったらメモした状態に戻す
g2.setTransform(old);
----------

必要なインポート文:
java.awt.RenderingHints
java.awt.geom.AffineTransform

わたしのサイトのゲームは対応しています

ぜひとも大きな画面で体験してください♪

対応済みのゲーム
Javaでゲームを作ろう1- シューティングゲーム編 -

#Java2D #Graphics2D #拡大/縮小

シェアしていただけるとうれしいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA