【发布时间】:2012-02-23 18:29:10
【问题描述】:
我无法创建一个巨大的 BufferedImage(内存不足不是问题)。有人有什么想法吗?
1.新的 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。新的 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)
【问题讨论】:
-
你想做什么?
-
您意识到这样的图像需要大约 30Gb 才能保存在内存中,对吧?请回答 Alastair 的问题,因为无论您想要达到什么目标,您似乎都走错了路。
-
我实际上有超过 30 演出的内存。我正在尝试将数据的图像表示保存到 png 文件中。谢谢。
-
将 BufferedImage 写入 png 文件非常简单 (docs.oracle.com/javase/tutorial/2d/images/saveimage.html)。我关心的更多是为什么你有如此巨大的形象。它是否意味着是一个精灵表或某种数据库?因为 Java 对图像的大小设置了(合理的)限制,所以我们需要了解更多信息,以便我们提出不同的策略。
-
“我实际上有超过 30 GB 的内存。” 您的 PC 所拥有的内存与 JRE 所拥有的内存不同。使用 32 位 VM 的 AFAIR 最多可以为 Java 应用程序分配 2Gb。