java - 创建巨大的 BufferedImage

标签 java image swing awt

我无法创建一个巨大的 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/

相关文章:

html - XHTML img 未显示在页面上,但在文本编辑器中有效

java - 平台碰撞和跳跃的奇怪行为

java - 在 JFileChooser 中启用右键单击

java - Netbeans 在鼠标悬停时显示方法头(参数、返回值)

java - 短到十六进制字符串

java - HashSet 的最大大小

javascript - 我怎样才能让 <img> 元素重新评估它的 onerror?

java - 递归地将给定字符串转换为驼峰式大小写

python - PIL - 需要抖动,但限制调色板会导致问题

java - 为什么 paintComponent 方法被调用了两次?