> 
> Basically, if you create a TYPE_INT_RGB, or
> TYPE_INT_ARGB, then it will 
> have 1 Raster with 1 DataBuffer with 1 array of int[]
> that is large 
> enough for every pixel in the image.  

I was browsing through some old threads and ran across this one.  Just thought 
I'd mention a problem I found.

I do what Jim suggested -- sort of -- and it works well.  The reason I use a 
MemoryImage Source is that it's a very simple way to stuff pixels into an 
image.  Just build your int array with your pixels and tell MemoryImageSource 
that it now has new pixels to update.  In my applet, the most time consuming 
computation is calculating the mapping from the source image to the projected 
image.  It takes O(100ms) per frame to do that.  The time difference between 
displaying  the calculated pixels with BI or MIS is negligible .

            ImageReadParam irp = new ImageReadParam();
            BufferedImage bi = null;
            ImageInputStream iis = ImageIO.createImageInputStream(new 
ByteArrayInputStream(imageBuffer));
            reader.setInput(iis, true);
            width = reader.getWidth(0);
            height = reader.getHeight(0);
            bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            irp.setDestination(bi);
            bi = reader.read(0,irp);
            pixels = 
((DataBufferInt)(bi.getRaster().getDataBuffer())).getData();
            for(int i = 0,j = 0; i < pixels.length; i++,j+=3)
                pixels[i] |= 0xff000000;

Two things to note:
1)  Using TYPE_INT_ARGB causes this code fragment to fail.  But I'm using 
1.5.0_15  

bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
            irp.setDestination(bi);
            bi = reader.read(0,irp);


java.lang.IllegalArgumentException: ImageReadParam num source & dest bands 
differ!
        at 
javax.imageio.ImageReader.checkReadParamBandSettings(ImageReader.java:2746)
        at 
com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:907)
        at 
com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:864)
        at 
pangnomic.PanGnomicImageFetch.makeBufferedImage(PanGnomicImageFetch.java:211)
        at pangnomic.PanGnomicImageFetch.run(PanGnomicImageFetch.java:299)
        at java.lang.Thread.run(Thread.java:595)

2)  The pixels from the DataBufferInt have the alpha channel initialized to 0.  
Giving an int array of pixels with the alpha channel initialized to 0 to the 
MIS will render as a wholly transparent image.  

These are things that I see in my applet with 1.5.0_15 and I suppose these 
things have been changed in 1.6.0.X.  Just thought I'd mention it.

If you want to think about what I mean by " calculating the mapping from the 
source image to the projected image ".  Look at the image in my viewer -- then 
look at the image.  See how things like the railing are straight in the viewer 
and curved in the image.  That's the mapping.  And it is way more 
computationally expensive and complicated than pushing pixels here and there so 
I opted for simple code and MIS is the simplest.


http://pancyl.com/Motel.htm

http://pancyl.com/images/Motel.jpg
[Message sent by forum member 'demonduck' (demonduck)]

http://forums.java.net/jive/thread.jspa?messageID=349881

===========================================================================
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
lists...@java.sun.com and include in the body of the message "help".

Reply via email to