2011-06-24 18 views
2

大きい画像の周囲に特定のパディングを追加する必要があり、以下のスニペットに示すように私が使用している現在の方法はメモリを使い果たしています。 PNGを開くとバットから約300MBのメモリが吸い上げられ、そのコピーを作って700Mバイトを超えると私はすべてのメモリを吸うことなくこれを行う方法を探しています。助言がありますか?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で大きな画像を扱うと、多くのメモリが消費されます。

いくつかの選択肢があります:netpbmのライブラリ http://netpbm.sourceforge.net/

  1. プリプロセスあなたのイメージ。 パッドに画像は次のようにコマンドを使用します。

    pngtopnm OldWorld.png | pnmpad -black 48 -left 48 -top 48 | pnmtopng > padded.png 
    
  2. あなただけの一画素あたりのバイトの代わりに4と画像タイプ BufferedImage.TYPE_INDEXEDを使用できるように、画像の色数を減らします。

  3. 1つの大きな画像の代わりに複数のタイルを使用し、一度に1つのタイルで を処理してください。次に、多くの画像をメモリに保存することを避けてください。