Java 中的 BufferedImage 大于 2^31 像素



我需要在java中创建一个非常大的图像,到目前为止我一直在使用java.awt.image.BufferedImage类。但似乎这个类用 int 存储它的像素,因为它不能超过 2^31 像素。我曾考虑过创建较小的图像并将它们拼接在一起,但问题是我尝试的照片编辑器(如Adobe Photoshop)甚至无法导入任何尺寸大于30,000像素的照片。

我曾考虑过制作自己的图像课程,但我的知识还不够,无法制作所有内容。

有什么建议吗? 谢谢

您可能很难加载该大小内存的图像,因为 2^31 x 1px 的图像的内存占用量为:

2^31px * 1px * 4 bytes/px = 4,294,967,296 bytes = ~4.2 GB

2^31px x 4px 的图像已经消耗了比大多数计算机更多的内存。在这种情况下,将图像拼接在一起是正确的设计。一个简单的解决方案是保留多维图像数组,并根据您的要求将它们加载到内存中和从内存中加载出来。

ImageMagick是一个成熟的图像处理实用程序,它可以支持非常大的图像尺寸。既然你说你想写一个大的图像文件,我建议使用蒙太奇功能。渲染分形的各个部分并将它们保存到磁盘,然后在渲染完成后,从程序中调用 ImageMagick 蒙太奇命令以生成最终的大文件。

我发现 GIMP 能够导入任何维度上 2^31 或更小的照片,因此我能够将照片拼接在一起。感谢所有回复的人。

相关内容

最新更新