创建巨大的 BufferedImage

发布于 2025-01-01 09:38:38 字数 1157 浏览 2 评论 0原文

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

I'm unable to create a huge BufferedImage (lack of memory is not the problem). Does anyone have any ideas?

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城°AllureLove 2025-01-08 09:38:38

我相信这是 Raster 类的限制。 宽度 * 高度 需要小于 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 上的 PNGJ 库。 com/p/pngj/ 就是为此目的而创建的。

I believe this is a limitation of the Raster class. Width * Height needs to be less than Integer.MAX_VALUE

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

As a work around I'd probably split my BufferedImage into sections where width and height are both less than the square root of Integer.MAX_VALUE, so 46,340x46,340 max.

UPDATE: It looks like the PNGJ Library at http://code.google.com/p/pngj/ was created for this purpose.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文