/* * $Id$ * * Copyright 2008 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.util; import java.awt.Point; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.image.DirectColorModel; import java.awt.image.SinglePixelPackedSampleModel; import java.awt.image.WritableRaster; import sun.awt.image.IntegerInterleavedRaster; /** * Provides helper methods for performing various things on image data. * * @author Chris Allan      <a * href="mailto:callan@blackcat.ca">callan@blackcat.ca</a> * @version 3.0 * @since 3.0 */ public class ImageUtil { /** * Creates a buffered image from a rendering engine RGB buffer without data * copying. * * @param buf * the rendering engine packed integer buffer. * @param sizeX * the X-width of the image rendered. * @param sizeY * the Y-width of the image rendered. * @return a buffered image wrapping <i>buf</i> with the X-Y dimensions * provided. */ public static BufferedImage createBufferedImage(int[] buf, int sizeX, int sizeY) { // First wrap the packed integer array with a Java2D buffer DataBuffer j2DBuf = new DataBufferInt(buf, sizeX * sizeY, 0); // Create a sample model which supplies the bit masks for each colour // component. SinglePixelPackedSampleModel sampleModel = new SinglePixelPackedSampleModel( DataBuffer.TYPE_INT, sizeX, sizeY, sizeX, new int[] { 0x00ff0000, // Red 0x0000ff00, // Green 0x000000ff, // Blue // 0xff000000 // Alpha }); // Now create a compatible raster which wraps the Java2D buffer and is // told how to get to the pixel data by the sample model. WritableRaster raster = new IntegerInterleavedRaster(sampleModel, j2DBuf, new Point(0, 0)); // Finally create a screen accessible colour model and wrap the raster // in a buffered image. ColorModel colorModel = new DirectColorModel(24, 0x00ff0000, // Red 0x0000ff00, // Green 0x000000ff // Blue // 0xff000000 // Alpha ); BufferedImage image = new BufferedImage(colorModel, raster, false, null); return image; } }