GrabandFade.java Source code

Java tutorial

Introduction

Here is the source code for GrabandFade.java

Source

/*
    
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.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.JFrame;

/**
 * GrabandFade.java -- displays provided image and then slowly fades to black
 */
public class GrabandFade 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 String imageURLString = "file:peppers.png";

    public void init() {
        URL url;
        try {
            // set imageURLString here
            url = new URL(imageURLString);
            originalImage = getImage(url);
        } catch (MalformedURLException me) {
            showStatus("Malformed URL: " + me.getMessage());
        }

        /*
         * Create PixelGrabber and use it to fill originalPixelArray with image
         * pixel data. This array will then by used by the MemoryImageSource.
         */
        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");
        }
    }

    /**
     * overwrite update method to avoid clearing of drawing area
     */
    public void update(Graphics g) {
        paint(g);
    }

    /**
     * continually draw image, then decrease color components of all pixels
     * contained in the originalPixelArray array until color components are all
     * 0
     */
    public void paint(Graphics g) {
        int value;
        int alpha, sourceRed, sourceGreen, sourceBlue;
        if (newImage != null) {
            g.drawImage(newImage, 0, 0, this); // redraw image

            // if image isn't faded to black, continue
            if (imageLoaded == false) {
                imageLoaded = true;
                for (int x = 0; x < width; x += 1)
                    for (int y = 0; y < height; y += 1) {

                        // find the color components
                        value = originalPixelArray[x * height + y];
                        alpha = (value >> 24) & 0x000000ff;
                        sourceRed = (value >> 16) & 0x000000ff;
                        sourceGreen = (value >> 8) & 0x000000ff;
                        sourceBlue = value & 0x000000ff;

                        // subtract index from each red component
                        if (sourceRed > index) {
                            sourceRed -= index;
                            imageLoaded = false;
                        } else
                            sourceRed = 0;

                        // subtract index from each green component
                        if (sourceGreen > index) {
                            sourceGreen -= index;
                            imageLoaded = false;
                        } else
                            sourceGreen = 0;

                        // subtract index from each blue component
                        if (sourceBlue > index) {
                            sourceBlue -= index;
                            imageLoaded = false;
                        } else
                            sourceBlue = 0;

                        /*
                         * when we pack new color components into integer we
                         * make sure the alpha (transparency) value represents
                         * opaque
                         */
                        value = (alpha << 24);
                        value += (sourceRed << 16);
                        value += (sourceGreen << 8);
                        value += sourceBlue;

                        // fill pixel array
                        originalPixelArray[x * height + y] = value;
                    }
                mis.newPixels(); //send pixels to ImageConsumer
            }
        }
    }

    public static void main(String[] argv) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GrabandFade a = new GrabandFade();

        frame.getContentPane().add(a);
        frame.setSize(300, 300);
        a.init();
        a.start();
        frame.setVisible(true);

    }
}