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

时间:2017-07-22 14:43:33

标签: java image bmp

我正在开展一个项目,包括可视化星形目录并创建一个可打印的bmp文件。如果我想打印分辨率为1200 dpi的24 x 24图像,则为28800 * 28800,大约为2.32 Gb。

通常在创建bmp文件时,可以创建一个BufferedImage,使用 setRGB 方法绘制图形,然后将其保存为带有ImageIO的bmp文件。 write

但是当我尝试分发我的程序时,最终用户可能没有足够的可用RAM,并且会导致OutOfMemoryError。

有没有办法避免在RAM上保存图像的每个像素?如果我可以将图像水平切割成几个波段,并将它们一个一个地保存到一个bmp文件中,那就太棒了(因为我可以获得已保存的缓冲区)。

类似的东西是:

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

1 个答案:

答案 0 :(得分:1)

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

前段时间我看到了类似的PNG输出:PngXxlWriter.java

相关问题