我必须创建一个分辨率非常大的图像,但是图像相对“稀疏”,只有图像中的某些区域需要绘制。
例如下面的代码
/* this take 5GB memory */
final BufferedImage img = new BufferedImage( 36000, 36000, BufferedImage.TYPE_INT_ARGB);
/* draw something */
Graphics g = img.getGraphics();
g.drawImage(....);
/* output as PNG */
final File out = new File("out.png");
ImageIO.write(img, "png", out);
我最后创建的 PNG 图像只有大约 200~300 MB。
问题是如何避免在开始时创建 5GB BufferedImage?我确实需要一个大尺寸的图像,但颜色信息非常稀疏。
BufferedImage 是否有任何 Stream 以便它不会占用太多内存?