On Friday, 15 March 2013 at 7:51 PM, andrea antonello wrote:
> Hi Jody,
> funky stuff you found out :)
> 
> Were you able to do a test on this to understand how much we would gain?
> 
> Nice,
> Andrea
> 
> 
> 

For the record I did eventually figure it out:

        BufferedImage image = new BufferedImage(w, h, 
BufferedImage.TYPE_4BYTE_ABGR);
        Graphics g = image.getGraphics();
     

// draw draw draw

        // And then convert
        if (image.getType() == BufferedImage.TYPE_4BYTE_ABGR) {
            int width = image.getWidth();
            int height = image.getHeight();
            int bands = 
image.getColorModel().getColorSpace().getNumComponents() + 1;
            int depth = 32;

            // Use the pixel data straight up!
            byte[] pixels = ((DataBufferByte) 
image.getRaster().getDataBuffer()).getData();
            PaletteData paletteData = new PaletteData(0x0000ff, 0x00ff00, 
0xff0000);
            ImageData data = new ImageData(width, height, depth, paletteData, 
width * bands, pixels);
            for (int y = 0; y < height; y++) {
                for (int x = 0; x < width; x++) {
                    int pixel = image.getRGB(x, y);
                    int alpha_value = (pixel >> 24) & 0x000000FF;
                    data.setAlpha(x, y,  alpha_value );
                }
            }                
            return data;
        }

As for what we will gain, one less "copy" of the byte[] representing the raster 
data. I was hoping not to have a copy occur at all but do not see a way to 
safely make that happen.

Jody 

_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel

Reply via email to