非常に大きな解像度で画像を作成する必要がありますが、画像は比較的「まばら」で、画像の一部の領域のみを描画する必要があります。
たとえば、次のコードで
/* 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 のストリームはありますか?