/*
Java Media APIs: Cross-Platform Imaging, Media and Visualization
Alejandro Terrazas
Sams, Published November 2002,
ISBN 0672320940
*/
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
import java.awt.image.WritableRaster;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JFrame;
/**
* GrabandFadewithRasters.java -- displays provided image and then slowly fades
* to black
*/
public class GrabandFadewithRasters extends Applet {
private Image originalImage;
private Image newImage;
private MemoryImageSource mis;
private int width;
private int height;
private int index = 10;
private int[] originalPixelArray;
private boolean imageLoaded = false;
private WritableRaster raster;
private String imageURLString = "file:images/peppers.png";
public void init() {
URL url;
try {
url = new URL(imageURLString);
originalImage = getImage(url);
} catch (MalformedURLException me) {
showStatus("Malformed URL: " + me.getMessage());
}
try {
PixelGrabber grabber = new PixelGrabber(originalImage, 0, 0, -1,
-1, true);
if (grabber.grabPixels()) {
width = grabber.getWidth();
height = grabber.getHeight();
originalPixelArray = (int[]) grabber.getPixels();
mis = new MemoryImageSource(width, height, originalPixelArray,
0, width);
mis.setAnimated(true);
newImage = createImage(mis);
} else {
System.err.println("Grabbing Failed");
}
} catch (InterruptedException ie) {
System.err.println("Pixel Grabbing Interrupted");
}
DataBufferInt dbi = new DataBufferInt(originalPixelArray, width
* height);
int bandmasks[] = { 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff };
SampleModel sm;
sm = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, width,
height, bandmasks);
raster = Raster.createWritableRaster(sm, dbi, null);
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
int value;
int sourceRed, sourceGreen, sourceBlue;
if (newImage != null) {
g.drawImage(newImage, 0, 0, this);
if (imageLoaded == false) {
imageLoaded = true;
for (int x = 0; x < width; x += 1)
for (int y = 0; y < height; y += 1) {
value = originalPixelArray[x * height + y];
sourceRed = raster.getSample(x, y, 1);
sourceGreen = raster.getSample(x, y, 2);
sourceBlue = raster.getSample(x, y, 3);
if (sourceRed > index) {
sourceRed -= index;
imageLoaded = false;
} else
sourceRed = 0;
if (sourceGreen > index) {
sourceGreen -= index;
imageLoaded = false;
} else
sourceGreen = 0;
if (sourceBlue > index) {
sourceBlue -= index;
imageLoaded = false;
} else
sourceBlue = 0;
raster.setSample(x, y, 1, sourceRed);
raster.setSample(x, y, 2, sourceGreen);
raster.setSample(x, y, 3, sourceBlue);
}
mis.newPixels();
}
}
}
public static void main(String[] argv) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GrabandFadewithRasters a = new GrabandFadewithRasters();
frame.getContentPane().add(a);
frame.setSize(300, 300);
a.init();
a.start();
frame.setVisible(true);
}
}
|