2011-06-24 96 views
2

我需要在大圖像周圍添加特定的填充,並且我正在使用的當前方法(如以下代碼片段所示)正在消耗內存。打開PNG的時候會佔用大約300mb的內存,並且製作一個拷貝讓我的存儲容量超過700mb,所以我正在尋找一種方法來完成這個任務,而不會佔用所有可用的內存。有什麼建議麼?Java - 將填充添加到大圖像

... 
BufferedImage img = ImageIO.read(new File("OldWorld.png")); 
BufferedImage img2 = new BufferedImage(img.getHeight()+padding,img.getWidth()+padding, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2 = img2.createGraphics(); 
g2.setPaint(new Color(0,0,0,0); 
g2.fillRect(0, 0, img.getHeight()+padding, img.getWidth()+padding); 
g2.drawImage(img, img.getHeight(),img.getWidth(), null); 
... 

回答

1

有沒有直接的方法來解決這個問題。 在Java中處理大圖像會消耗大量內存。

一些替代方案:

  1. 處理前你用的NetPBM庫 http://netpbm.sourceforge.net/圖像。 要填充的圖像使用如下命令:

    pngtopnm OldWorld.png | pnmpad -black 48 -left 48 -top 48 | pnmtopng > padded.png 
    
  2. 減少圖像的顏色數,這樣就可以使用圖像類型 BufferedImage.TYPE_INDEXED每個像素,而不是四個只有一個字節。

  3. 使用多個圖塊而不是單個大圖像並且一次只能使用一個圖塊工作 。然後,您可以避免在內存中存儲大量的圖像 數據。