![]() |
The Java Developers Almanac 1.4Order this book from Amazon. |
e668. Creating a Buffered Image from an Array of Color-Indexed Pixel ValuesThis example demonstrates how to convert a byte array of pixel values that are indices to a color table into aBufferedImage . In
particular, the example generates the Mandelbrot set in a byte buffer
and combines this data with a SampleModel , ColorModel , and
Raster into a BufferedImage . A 16-color index color model
is used to represent the pixel colors.
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.image.*; // Instantiate this class and then use the draw() method to draw the // generated on the graphics context. public class Mandelbrot2 { // Holds the generated image Image image; // 16-color model; this method is defined in // e660 Creating an Image from an Array of Color-Indexed Pixel Values ColorModel colorModel = generateColorModel(); public Mandelbrot2(int width, int height) { // Initialize with default location this(width, height, new Rectangle2D.Float(-2.0f, -1.2f, 3.2f, 2.4f)); } public Mandelbrot2(int width, int height, Rectangle2D.Float loc) { // Generate the pixel data; this method is defined in // e660 Creating an Image from an Array of Color-Indexed Pixel Values byte[] pixels = generatePixels(width, height, loc); // Create a data buffer using the byte buffer of pixel data. // The pixel data is not copied; the data buffer uses the byte buffer array. DataBuffer dbuf = new DataBufferByte(pixels, width*height, 0); // The number of banks should be 1 int numBanks = dbuf.getNumBanks(); // 1 // Prepare a sample model that specifies a storage 4-bits of // pixel datavd in an 8-bit data element int bitMasks[] = new int[]{(byte)0xf}; SampleModel sampleModel = new SinglePixelPackedSampleModel( DataBuffer.TYPE_BYTE, width, height, bitMasks); // Create a raster using the sample model and data buffer WritableRaster raster = Raster.createWritableRaster(sampleModel, dbuf, null); // Combine the color model and raster into a buffered image image = new BufferedImage(colorModel, raster, false, null);//new java.util.Hashtable()); } public void draw(Graphics g, int x, int y) { g.drawImage(image, x, y, null); } }Here's some code that uses the Mandelbrot2 class:
class RunMandelbrot2 { static public void main(String[] args) { new RunMandelbrot2(); } RunMandelbrot2() { Frame frame = new Frame("Mandelbrot2 Set"); frame.add(new MyCanvas()); frame.setSize(300, 200) ; frame.setVisible(true); } class MyCanvas extends Canvas { Mandelbrot2 mandelbrot; MyCanvas() { // Add a listener for resize events addComponentListener(new ComponentAdapter() { // This method is called when the component's size changes public void componentResized(ComponentEvent evt) { Component c = (Component)evt.getSource(); // Get new size Dimension newSize = c.getSize(); // Regenerate the image mandelbrot = new Mandelbrot2(newSize.width, newSize.height); c.repaint(); } }); } public void paint(Graphics g) { if (mandelbrot != null) { mandelbrot.draw(g, 0, 0); } } } }
e667. Creating a Buffered Image from an Image e669. Drawing on a Buffered Image e670. Converting a Buffered Image to an Image e671. Getting and Setting Pixels in a Buffered Image e672. Scaling, Shearing, Translating, and Rotating a Buffered Image
© 2002 Addison-Wesley. |