我必須創建一個分辨率非常大的圖像, 但圖像相對「稀疏」,圖像中只有一些區域需要繪製。在java中創建一個稀疏的BufferedImage
例如用下面的代碼
/* 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? 我確實需要大尺寸的圖像,但顏色信息非常稀疏。
是否有任何Stream for BufferedImage,以便它不會佔用太多內存?
使用DEFLATE算法壓縮PNG作爲創建它的最後一步,因此它比「BufferedImage」小得多,這並不奇怪。 – Powerlord 2010-06-11 14:23:42