创建巨大的BufferedImage

我无法创建一个巨大的BufferedImage(缺少内存不是问题)。 有没有人有任何想法?

1. new BufferedImage(10000,1000000,BufferedImage.TYPE_3BYTE_BGR);

Exception in thread "main" java.lang.NegativeArraySizeException at java.awt.image.DataBufferByte.(DataBufferByte.java:42) at java.awt.image.Raster.createInterleavedRaster(Raster.java:253) at java.awt.image.BufferedImage.(BufferedImage.java:368) 

2. new BufferedImage(10000,1000000,BufferedImage.TYPE_INT_RGB);

 Exception in thread "main" java.lang.IllegalArgumentException: Dimensions (width=10000 height=1000000) are too large at java.awt.image.SampleModel.(SampleModel.java:112) at java.awt.image.SinglePixelPackedSampleModel.(SinglePixelPackedSampleModel.java:124) at java.awt.image.Raster.createPackedRaster(Raster.java:770) at java.awt.image.Raster.createPackedRaster(Raster.java:466) at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015) at java.awt.image.BufferedImage.(BufferedImage.java:315) 

我相信这是Raster类的限制。 Width * Height需要小于Integer.MAX_VALUE

http://docs.oracle.com/javase/7/docs/api/java/awt/image/Raster.html

作为解决方法,我可能会将我的BufferedImage拆分为宽度和高度均小于Integer.MAX_VALUE平方根的部分,因此最大值为46,340×46,340。

更新:看起来http://code.google.com/p/pngj/上的PNGJ库是为此目的而创建的。