ColorFilterTest.java



/**
 * Image のカラーを変換する実験
 */
import java.awt.*;
import java.awt.image.*;

/** Imageを表示するキャンバス */

class ColorFilteredImageCanvas extends Canvas {

  /** Image のオブジェクト */
    public Image orig, rfiltered, gfiltered, bfiltered;

  /** コンストラクタ */
    public ColorFilteredImageCanvas( Image image ) {
        super();
        orig = image;
        ColorFilter rfilter = new ColorFilter( 100, 0, 0 );
        ColorFilter gfilter = new ColorFilter( 0, 100, 0 );
        ColorFilter bfilter = new ColorFilter( 0, 0, 100 );
        rfiltered = createImage(
            new FilteredImageSource( orig.getSource(), rfilter ) );
        gfiltered = createImage(
            new FilteredImageSource( orig.getSource(), gfilter ) );
        bfiltered = createImage(
            new FilteredImageSource( orig.getSource(), bfilter ) );
        setSize( orig.getWidth(this)*4, orig.getHeight(this) );
    }

  /** 描画メソッド */
    public void paint( Graphics g ) {
        int w = orig.getWidth(this);
        g.drawImage( orig, 0, 0, this );
        g.drawImage( rfiltered, w, 0, this );
        g.drawImage( gfiltered, w*2, 0, this );
        g.drawImage( bfiltered, w*3, 0, this );
    }
}

/** JPEG画像をロードする実験 */

public class ColorFilterTest extends Frame {

  /** 画像を表示するキャンバス */
    public ColorFilteredImageCanvas canvas;

  /** コンストラクタ */
    public ColorFilterTest( Image image ) {

        super( "Color Filter Test" );
        canvas = new ColorFilteredImageCanvas( image );
    }

  /** 最初に呼び出されるメソッド */
    public static void main( String argv[] ) {
        Toolkit tk = Toolkit.getDefaultToolkit();
        Image image = tk.getImage( argv[0] );
        ColorFilterTest frame = new ColorFilterTest( image );
        frame.prepareImage( image, frame );
    }

  /** イメージの監視を行うメソッド */
    public boolean imageUpdate( Image image, int flag,
                  int x, int y, int width, int height ) {
        if( (flag & ALLBITS) == ALLBITS ) {
            canvas.setSize( width*4, height );
            add( canvas, "Center" );
            pack();
            setVisible( true );
        }
        return true;
    }
}