2009年11月8日

透過BufferedImage作成

Javaの透過BufferedImageによる描画について書いてみようと思います。
SRPGの戦闘システム風JavaAppletの描画で用いました。

今までは特に工夫せずに毎回一から線とか四角で描画していましたが、
毎回同じことをするのは無駄だと思ったので、少しいじりました。
まずメニューとかマップとかのオブジェクトごとに
java.awt.image.BufferedImageインスタンスを持っておいて、
最初か変更のあったときだけそれに描画しておいて、
そのBufferedImageを毎回スクリーンに描画するって寸法です。
ペイントソフトでいうレイヤーみたいなもんですね。

で、まぁ、このBufferedImageが不透明度100%で初期化されるので、
これを透明な状態で初期化しなければなりません。
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2D = img.createGraphics();
g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f));
Rectangle2D.Double rect = new Rectangle2D.Double(0,0,img.getHeight(),img.getHeight());
g2D.fill(rect);
g2D.setPaintMode();
コードはこんな感じになります。width, heightには幅と高さを入れてください。
http://www.ibm.com/developerworks/jp/java/library/j-begjava-index/#c
こちらを参考にしました。といっても最後にsetPaintMode()しただけですが。
こうしてGraphicsオブジェクトを初期化したあとは普通に描画していくだけです。

ちなみに
http://www.ne.jp/asahi/hishidama/home/tech/java/image.html#画像を加工する
こちらではBufferedImage.setRGB()で透明度を指定しているようですが、
気が向いたら処理時間を比べてみようと思います。

1 件のコメント:

匿名 さんのコメント...

4行目、両方getHeight()になっていますよ