/*
 * @(#)FilteredImageSource.java 1.22 00/02/02
 *
 * Copyright 1995-2000 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * This software is the proprietary information of Sun Microsystems, Inc.  
 * Use is subject to license terms.
 * 
 */package java.awt.image;import java.awt.Image;
import java.awt.image.ImageFilter;
import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
import java.util.Hashtable;
import java.awt.image.ColorModel;/**
 * This class is an implementation of the ImageProducer interface which
 * takes an existing image and a filter object and uses them to produce
 * image data for a new filtered version of the original image.
 * Here is an example which filters an image by swapping the red and
 * blue compents:
 * <pre>
 * 
 * Image src = getImage("doc:///demo/images/duke/T1.gif");
 * ImageFilter colorfilter = new RedBlueSwapFilter();
 * Image img = createImage(new FilteredImageSource(src.getSource(),
 * colorfilter));
 * 
 * </pre>
 *
 * @see ImageProducer
 *
 * @version 1.22 02/02/00
 * @author  Jim Graham
 */
public class FilteredImageSource implements ImageProducer {
    ImageProducer src;
    ImageFilter filter;    /**
     * Constructs an ImageProducer object from an existing ImageProducer
     * and a filter object.
     * @see ImageFilter
     * @see java.awt.Component#createImage
     */
    public FilteredImageSource(ImageProducer orig, ImageFilter imgf) {
src = orig;
filter = imgf;
    }    private Hashtable proxies;    /**
     * Adds an ImageConsumer to the list of consumers interested in
     * data for this image.
     * @see ImageConsumer
     */
    public synchronized void addConsumer(ImageConsumer ic) {
if (proxies == null) {
    proxies = new Hashtable();
}
if (!proxies.containsKey(ic)) {
    ImageFilter imgf = filter.getFilterInstance(ic);
    proxies.put(ic, imgf);
    src.addConsumer(imgf);
}
    }    /**
     * Determines whether an ImageConsumer is on the list of consumers 
     * currently interested in data for this image.
     * @return true if the ImageConsumer is on the list; false otherwise
     * @see ImageConsumer
     */
    public synchronized boolean isConsumer(ImageConsumer ic) {
return (proxies != null && proxies.containsKey(ic));
    }    /**
     * Removes an ImageConsumer from the list of consumers interested in
     * data for this image.
     * @see ImageConsumer
     */
    public synchronized void removeConsumer(ImageConsumer ic) {
if (proxies != null) {
    ImageFilter imgf = (ImageFilter) proxies.get(ic);
    if (imgf != null) {
src.removeConsumer(imgf);
proxies.remove(ic);
if (proxies.isEmpty()) {
    proxies = null;
}
    }
}
    }    /**
     * Adds an ImageConsumer to the list of consumers interested in
     * data for this image, and immediately starts delivery of the
     * image data through the ImageConsumer interface.
     * @see ImageConsumer
     */
    public void startProduction(ImageConsumer ic) {
if (proxies == null) {
    proxies = new Hashtable();
}
ImageFilter imgf = (ImageFilter) proxies.get(ic);
if (imgf == null) {
    imgf = filter.getFilterInstance(ic);
    proxies.put(ic, imgf);
}
src.startProduction(imgf);
    }    /**
     * Requests that a given ImageConsumer have the image data delivered
     * one more time in top-down, left-right order.  The request is
     * handed to the ImageFilter for further processing, since the
     * ability to preserve the pixel ordering depends on the filter.
     * @see ImageConsumer
     */
    public void requestTopDownLeftRightResend(ImageConsumer ic) {
if (proxies != null) {
    ImageFilter imgf = (ImageFilter) proxies.get(ic);
    if (imgf != null) {
imgf.resendTopDownLeftRight(src);
    }
}
    }
}没有空啊!

解决方案 »

  1.   

    这是一个构造方法,在创建这个对象时调用,一般做些初始化的操作,比如这个FilteredImageSource的构造就做了这样的初始化的操作,你可以看看它的源文件
    public FilteredImageSource(ImageProducer orig, ImageFilter imgf) {
    src = orig;
    filter = imgf;
    }
      

  2.   

    是你看错了吧,这时它的source:public FilteredImageSource(ImageProducer orig, ImageFilter imgf) {
    src = orig;
    filter = imgf;
        }