我无法创建一个巨大的 BufferedImage(内存不足不是问题)。有人有什么想法吗?
<强>1。 new BufferedImage(10000, 1000000, BufferedImage.TYPE_3BYTE_BGR);
Exception in thread "main" java.lang.NegativeArraySizeException
at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:42)
at java.awt.image.Raster.createInterleavedRaster(Raster.java:253)
at java.awt.image.BufferedImage.<init>(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.<init>(SampleModel.java:112)
at java.awt.image.SinglePixelPackedSampleModel.<init>(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.<init>(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,340x46,340。
更新:它看起来像 http://code.google.com/p/pngj/ 处的 PNGJ 库就是为此目的而创建的。
关于java - 创建巨大的 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089675/