java 显示大图片

来源:百度知道 编辑:UC知道 时间:2024/06/05 07:38:36
我想显示一张图片,容量4M,用普通的显示方法都报错,好像是JVM内存溢出,可是我不会解决,求教!
Exception in thread "Image Fetcher 3" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(Unknown Source)
at java.awt.image.Raster.createPackedRaster(Unknown Source)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
at sun.awt.image.ImageRepresentation.createBufferedImage(Unknown Source)
at sun.awt.image.ImageRepresentation.setPixels(Unknown Source)
at sun.awt.image.ImageDecoder.setPixels(Unknown Source)
at sun.awt.image.JPEGImageDecoder.sendPixels(Unknown Source)
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
我是在做J2SE的开发,在JPanel里显示这个大图,其实

最简单的方式是用ACDsee等软件调整图片尺寸和压缩率之后就能变小,然后再用Java打开。
如果你非要用Java打开的话,这就涉及到很多计算机图形学中的图形缩小问题了(其实ACDsee等软件就是用这个算法了)。建个流读入图片,在读入的过程中按照缩小算法处理图片,已得到一个较小的图片对象。不过过程太复杂,还是推荐用第一种方法。

补充:对显示要求不高的话,可以调高图片压缩率来减小体积。既然是显示一部分,那你读入的时候就读入一部分吧,没必要全图读入啊。用java.awt.image包内的API读入相应的像素就行了

4m是必然的了,比bmp图都大,最好能控制图片大小在200K之内,你要缩小是吧,但是我弄的是j2ee的哟,imageio这些类j2se支持吗?

你运行的时候这样输入!

java helloWorld -Xms80m -Xmx512m

可以考虑用jsf