Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Graband Fade with Rasters

/* 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);   } }