如何在java中保存一个巨大的bmp文件?

如何在java中保存一个巨大的bmp文件?,java,image,bmp,Java,Image,Bmp,我正在做一个项目,包括可视化星表和创建一个可打印的bmp文件。如果我想打印一张分辨率为1200 dpi的24*24图片,它的分辨率应该是28800*28800,大约是2.32 Gb 通常,在创建bmp文件时,需要制作一个BuffereImage,使用setRGB方法绘制一些图形,然后使用ImageIO.write将其保存为bmp文件 但是,当我试图分发我的程序时,最终用户可能没有足够的可用RAM,这将导致OutOfMemory错误 有没有办法避免将图像的每个像素都保存在RAM上?如果我能将图像水

我正在做一个项目,包括可视化星表和创建一个可打印的bmp文件。如果我想打印一张分辨率为1200 dpi的24*24图片,它的分辨率应该是28800*28800,大约是2.32 Gb

通常,在创建bmp文件时,需要制作一个BuffereImage,使用setRGB方法绘制一些图形,然后使用ImageIO.write将其保存为bmp文件

但是,当我试图分发我的程序时,最终用户可能没有足够的可用RAM,这将导致OutOfMemory错误

有没有办法避免将图像的每个像素都保存在RAM上?如果我能将图像水平剪切成几个带,并将它们逐个保存到单个bmp文件中,那就太好了(因为我可以利用保存的缓冲区)

类似的情况是:


在找到imageIO和awt包之前,我编写了一个位图类,将位图保存为csv文件,并使用外部软件进行渲染。它有一个toString方法,我使用该方法将csv的内容保存为字符串,而不是实际保存在磁盘上。当我想制作一个大图像时,我会创建一个文件编写器和一个打印编写器。我缓冲图像的水平带,并用printWriter将其写入磁盘。然后我缓冲下一个带并替换旧带,然后用printWriter再次写入。完成后,我关闭写入程序,并将完整的位图作为csv文件保存在磁盘上

您需要的是直接创建图像文件而不将数据完全加载到内存中的代码(通常称为平铺图像处理)。我不知道有哪个Java库允许这样做,因此我的建议是查看BMP文件格式,然后手动编写文件。AFAIR的BMP文件格式非常简单

不久前,我在PNG输出中看到了类似的东西: