java中的BufferedImage大于2 ^ 31像素

时间:2017-07-04 21:26:41

标签: java image bufferedimage

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

我已经考虑过创建自己的图像课程,但是我知识不足以让一切都进入那个阶段。

有什么建议吗? 谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

我发现GIMP能够导入任何尺寸为2 ^ 31或更小的照片,因此我可以将照片拼接在一起。谢谢所有回复的人。