FileDocCategorySizeDatePackage
GrayImage.javaAPI DocExample1675Mon Sep 22 13:30:30 BST 1997None

GrayImage.java

// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples

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

/** An applet that display an image, and a filtered version of the image */
public class GrayImage extends Applet {
  Image orig, gray;  // the original and grayed-out versions of the image

  /**
   * Load the image.  Create a new image that is a grayer version of it, using
   * a FilteredImageSource, ImageProducer and a the GrayFilter class, below.
   */
  public void init() {
    orig = this.getImage(this.getDocumentBase(), "cover.gif");
    ImageFilter filter = new GrayFilter();
    ImageProducer producer = new FilteredImageSource(orig.getSource(), filter);
    gray = this.createImage(producer);
  }

  /** Display the original image and gray version side-by-side */
  public void paint(Graphics g) {
    g.drawImage(orig, 25, 25, this);
    g.drawImage(gray, 200, 25, this);
  }
}
/** Filter an image by computing a weighted average of its colors with gray */
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) + 0x1800000)/3) & 0xff0000;
    int g = (((rgb & 0x00ff00) + 0x018000)/3) & 0x00ff00;
    int b = (((rgb & 0x0000ff) + 0x000180)/3) & 0x0000ff;
    return a | r | g | b;
  }
}