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;
}
}