プログラム悪戦苦闘日記

はてなダイアリーからの移行(遺物)

描画処理2 - フェード

 いろんなサイトの、おいしいところをまとめるシリーズ第2弾。
 
 Javaでフェード処理をするのに一番手っ取り早い方法は、alpha値を操作すること。
しかし、pixel単位での操作は遅すぎ。それでAPIを調べてみると、

  1. java.awt.image.RGBImageFilterのサブクラスを作り、フィルターを定義
  2. java.awt.AlphaComositeでalpha値指定

 単にフェードをするようにaplpha値を変化させるときは、AlphaCompositeのほうが、
パフォーマンスがよいらしい。

public class HogeApplet extends JApplet {
    float alpha_ = 0.5F; // alpha値
    
    ‥‥
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha_));
        ‥描画処理‥
    }
}

 一次的に変化させるときは、Graphics2D#getComposite() でCompositeを保持しておいて、
後から再セットで戻せばよろしい。
 

  • Hey! Java Programing!

Javaのグラフィック関連の細かい説明があってGood
http://www.mars.dti.ne.jp/~torao/program/graphics/index.html

  • たかな工房

いろいろなサンプルプログラムがある。ずばりやりたいことの一覧ですね(泣)
http://www.takana.info/java2/index.htm