FileDocCategorySizeDatePackage
GrayButton.javaAPI DocExample1971Sat Jun 02 03:12:32 BST 2001None

GrayButton.java

// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.

import java.applet.*;
import java.awt.*;
import java.awt.image.*;

public class GrayButton extends Applet {
    Image i, gray;

    // Load an image from a file.  Create a new image that is a grayer
    // version of it, using a FilteredImageSoruce ImageProducer and a
    // GrayFilter ImageFilter.
    public void init() {
        i = this.getImage(this.getDocumentBase(), "images/button.gif");
        ImageFilter f = new GrayFilter();
        ImageProducer producer = new FilteredImageSource(i.getSource(), f);
        gray = this.createImage(producer);
    }

    // Display the image
    public void paint(Graphics g) {
        g.drawImage(i, 20, 20, this);
    }

    // When the user clicks, display the gray image
    public boolean mouseDown(Event e, int x, int y) {
        Graphics g = this.getGraphics();
        Dimension d = this.size();
        g.clearRect(0, 0, d.width, d.height);
        g.drawImage(gray, 20, 20, this);
        return true;
    }
    // And restore the normal one when the mouse goes up.
    public boolean mouseUp(Event e, int x, int y) {
        update(this.getGraphics());
        return true;
    }
}

// Filter an image by averaging all of its colors with white.
// This washes it out and makes it grayer.
class GrayFilter extends RGBImageFilter {
    public GrayFilter() { canFilterIndexColorModel = true; }
    public int filterRGB(int x, int y, int rgb) {
        int a = rgb & 0xff000000;
        int r = ((rgb & 0xff0000) + 0xff0000)/2;
        int g = ((rgb & 0x00ff00) + 0x00ff00)/2;
        int b = ((rgb & 0x0000ff) + 0x0000ff)/2;
        return a | r | g | b;
    }
}