I'm having some difficulty getting large images to work at all. I have a
3.2meg .gif file (or 32meg bmp file) that continuously runs out of memory.
I'm using JDK 1.2 on Windows NT 4  (SP 3) System Info:128meg Pentium
II-400.
Even setting the heap to a maximum of 200m didn't work.

java.lang.OutOfMemoryError:
        at java.awt.image.DataBufferUShort.<init>(DataBufferUShort.java:50)
        at java.awt.image.Raster.createPackedRaster(Raster.java:400)
        at
java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorM
odel.java:641)
        at
sun.awt.image.ImageRepresentation.createBufferedImage(ImageRepresentation.j
ava:222)
        at
sun.awt.image.ImageRepresentation.setDimensions(ImageRepresentation.java:14
3)
        at sun.awt.image.ImageDecoder.setDimensions(Compiled Code)
        at
sun.awt.image.GifImageDecoder.readImage(GifImageDecoder.java:547)
        at sun.awt.image.GifImageDecoder.produceImage(Compiled Code)Bad
hess
java.lang.NullPointerException

        at
sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:24
8)
        at sun.awt.image.ImageFetcher.fetchloop(Compiled Code)
        at sun.awt.image.ImageFetcher.run(Compiled Code)

Here's the code I am using, (I believe I got this from a sample app on Java
 World):

     Image image = Toolkit.getDefaultToolkit().getImage(filename);
     MediaTracker mt = new MediaTracker(m_canvas);
     mt.addImage(image, 0);
     try {
          mt.waitForID(0);
     }
     catch (InterruptedException ie)
     {
          return(null);
     }

     if (mt.isErrorID(0)) {
          return(null);
     }

     // Make a BufferedImage from the Image.
     BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),
          image.getHeight(null),BufferedImage.TYPE_INT_RGB);
     Graphics2D g2 = bufferedImage.createGraphics();
     g2.drawImage(image, null, null);

I also tried this using the JAI to no avail:

     SeekableStream stream = new FileSeekableStream(filename);
     String[] names = ImageCodec.getCodecNames(stream);
     ImageDecoder dec= ImageCodec.createImageDecoder(names[0], stream,
null);
     RenderedImage im= dec.decodeAsRenderedImage();
     PlanarImage planarImage= PlanarImage.wrapRenderedImage(im);

     BufferedImage bufferedImage= planarImage.getAsBufferedImage();

I'm not quite sure what's going on. I was able to load a 12 meg .bmp image
with my maximum heap set to 200m,
and a few minutes of system swapping.

Is there any documentation describing what's going on behind the scenes
when I create an Image (or BufferedImage)?

Gary Mau


=====================================================================
To subscribe/unsubscribe, send mail to [EMAIL PROTECTED]
Java 2D Home Page: http://java.sun.com/products/java-media/2D/

Reply via email to