我需要创建一个非常高分辨率的图像,但是图像相对“稀疏”,只有图像中的某些区域需要绘制。
例如以下代码:
/* 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~300MB。
问题是,我如何避免在开始时创建一个5GB的BufferedImage?我确实需要具有大尺寸但只包含非常稀疏颜色信息的图像。
是否有BufferedImage的流,以便它不会占用太多内存?