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/