FileDocCategorySizeDatePackage
MakeFades.javaAPI DocExample3858Sat Jan 24 10:44:36 GMT 2004je3.graphics

MakeFades.java

/*
 * Copyright (c) 2004 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose,
 * including teaching and use in open-source projects.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book, 
 * please visit http://www.davidflanagan.com/javaexamples3.
 */
package je3.graphics;
import java.io.*;
import java.awt.*;
import java.awt.image.*;

/*
 * This program creates PNG images of the specified color that fade from fully
 * opaque to fully transparent.  Images of this sort are useful in web design
 * where they can be used as background images and combined with background
 * colors to produce two-color fades. (IE6 does not support PNG transparency).
 * 
 * Images are produced in three sizes and with and 8 directions.  The images
 * are written into the current directory and are given names of the form:
 * fade-to-color-speed-direction.png
 * 
 *   color:      the color name specified on the command line
 *   speed:      slow (1024px), medium (512px), fast(256px)
 *   direction:  a compass point: N, E, S, W, NE, SE, SW, NW
 *
 * Invoke this program with a color name and three floating-point values 
 * specifying the red, green, and blue components of the color. 
 */
public class MakeFades  {
    // A fast fade is a small image, and a slow fade is a large image
    public static final String[] sizeNames = { "fast", "medium", "slow" };
    public static final int[] sizes = { 256, 512, 1024 };

    // Direction names and coordinates
    public static final String[] directionNames = { 
	"N", "E", "S", "W", "NE", "SE", "SW", "NW"
    };
    public static float[][] directions = {
	new float[] { 0f, 1f, 0f, 0f },  // North
	new float[] { 0f, 0f, 1f, 0f },  // East
	new float[] { 0f, 0f, 0f, 1f },  // South
	new float[] { 1f, 0f, 0f, 0f },  // West
	new float[] { 0f, 1f, 1f, 0f },  // Northeast
	new float[] { 0f, 0f, 1f, 1f },  // Southeast
	new float[] { 1f, 0f, 0f, 1f },  // Southwest
	new float[] { 1f, 1f, 0f, 0f }   // Northwest
    };


    public static void main(String[] args)
	throws IOException, NumberFormatException
    {
	// Parse the command-line arguments
	String colorname = args[0];
	float red = Float.parseFloat(args[1]);
	float green = Float.parseFloat(args[2]);
	float blue = Float.parseFloat(args[3]);

	// Create from and to colors based on those arguments
	Color from = new Color(red, green, blue, 0.0f);  // transparent 
	Color to = new Color(red, green, blue, 1.0f);    // opaque

	// Loop through the sizes and directions, and create an image for each
	for(int s = 0; s < sizes.length; s++) { 
	    for(int d = 0; d < directions.length; d++) {
		// This is the size of the image
		int size = sizes[s];

		// Create a GradientPaint for this direction and size
		Paint paint = new GradientPaint(directions[d][0]*size,
						directions[d][1]*size,
						from,
						directions[d][2]*size,
						directions[d][3]*size,
						to);

		// Start with a blank image that supports transparency
		BufferedImage image =
		    new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);

		// Now use fill the image with our color gradient
		Graphics2D g = image.createGraphics();
		g.setPaint(paint);
		g.fillRect(0, 0, size, size);

		// This is the name of the file we'll write the image to
		File file = new File("fade-to-" + 
				     colorname + "-" +
				     sizeNames[s] + "-" +
				     directionNames[d] + ".png");

		// Save the image in PNG format using the javax.imageio API
		javax.imageio.ImageIO.write(image, "png", file);

		// Show the user our progress by printing the filename
		System.out.println(file);
	    }
	}
    }
}