// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski. Copyright (c) 1997 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.awt.*;
import java.awt.image.*;
public class DynamicFilter extends ImageFilter {
Color overlapColor;
int delay;
int imageWidth;
int imageHeight;
int iterations;
DynamicFilter (int delay, int iterations, Color color) {
this.delay = delay;
this.iterations = iterations;
overlapColor = color;
}
public void setDimensions (int width, int height) {
imageWidth = width;
imageHeight = height;
consumer.setDimensions (width, height);
}
public void setHints (int hints) {
consumer.setHints (ImageConsumer.RANDOMPIXELORDER);
}
public void resendTopDownLeftRight (ImageProducer ip) {
}
public void imageComplete (int status) {
if ((status == IMAGEERROR) || (status == IMAGEABORTED)) {
consumer.imageComplete (status);
return;
} else {
int xWidth = imageWidth / iterations;
if (xWidth <= 0)
xWidth = 1;
int newPixels[] = new int [xWidth*imageHeight];
int iColor = overlapColor.getRGB();
for (int x=0;x<(xWidth*imageHeight);x++)
newPixels[x] = iColor;
int t=0;
for (;t<(imageWidth-xWidth);t+=xWidth) {
consumer.setPixels(t, 0, xWidth, imageHeight,
ColorModel.getRGBdefault(), newPixels, 0, xWidth);
consumer.imageComplete (ImageConsumer.SINGLEFRAMEDONE);
try {
Thread.sleep (delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int left = imageWidth-t;
if (left > 0) {
consumer.setPixels(imageWidth-left, 0, left, imageHeight,
ColorModel.getRGBdefault(), newPixels, 0, xWidth);
consumer.imageComplete (ImageConsumer.SINGLEFRAMEDONE);
}
consumer.imageComplete (STATICIMAGEDONE);
}
}
}
|