home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 February
/
VPR9802A.ISO
/
APP_DEMO
/
VC
/
MAIN.BIN
/
FilteredImageSource.java
< prev
next >
Wrap
Text File
|
1997-10-27
|
4KB
|
147 lines
/*
* @(#)FilteredImageSource.java 1.17 96/11/23
*
* Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
* CopyrightVersion 1.1_beta
*
*/
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.17 11/23/96
* @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);
}
}
}
}