java.awt.image パッケージの応用

java.awt.image パッケージの応用として、イメージのフィルタリング を実現してみましょう。
java.awt.image パッケージには、イメージを取り扱うための機能が多数提供され ています。その多くはブラウザなどのシステムの側で利用されますが、 いくつかのクラスは、通常のプログラムの中でイメージを加工したりするのに 便利な機能を提供してくれます。 その中から、RGBImageFilter クラスを元にして、カラーフィルターを 作成してみましょう。

import java.awt.Color;
import java.awt.image.RGBImageFilter;

/** RGB値によって色を調整するフィルター ColorFilterクラス */

public class ColorFilter extends RGBImageFilter {

    /** 各色の透過度( 0% - 100% ) */
 
      public int tRed, tGreen, tBlue;

    /** コンストラクタ */
 
       public ColorFilter( int r, int g, int b ) {
 
              tRed = r;  tGreen = g;  tBlue = b; 
              canFilterIndexColorModel = true;  // インデックスカラーにも対応
       } 
 
       public ColorFilter() { 
 
              tRed = 100;  tGreen = 100;  tBlue = 100; 
              canFilterIndexColorModel = true;  // インデックスカラーにも対応
       } 
 
    /** フィルタリングの処理を実行するメソッド */
 
       public int filterRGB(int x, int y, int rgb) {
 
              int r = (( rgb & 0x00ff0000 ) >> 16) * tRed / 100;
              if( r < 0 )  r = 0;
              if( r > 255 )  r = 255;
              int g = (( rgb & 0x0000ff00 ) >> 8) * tGreen / 100;
              if( g < 0 )  g = 0;
              if( g > 255 )  g = 255;
              int b = (( rgb & 0x000000ff ) ) * tBlue / 100;
              if( b < 0 )  b = 0;
              if( b > 255 )  b = 255;

              return 0xff000000 | (r << 16) | (g << 8) | (b << 0);
        }

    /** ファクターの設定を実行するメソッド */
 
        public void setColor( int r, int g, int b ){

              tRed = r;  tGreen = g;  tBlue = b; 
        }
 
        public void setRed( int r ){

              tRed = r;
        }
 
        public void setGreen( int g ){

              tGreen = g;
        }
 
        public void setBlue( int b ){

              tBlue = b; 
        }
}