我想將一些java.awt.Image對象保存到磁盤中。但是當我嘗試像:使用BufferedImage和ImageIO保存圖像時內存不足問題
for (Image image : images) {
image = new ImageIcon(image).getImage();
BufferedImage temp = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = temp.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
File tempFile = null;
try {
tempFile = File.createTempFile("img", ".jpg");
ImageIO.write(temp, "jpg", tempFile);
} catch (IOException ex) {
ex.printStackTrace();
}
files.add(tempFile);
}
我得到java堆空間錯誤。
我需要把
image = new ImageIcon(image).getImage();
得到加載,這樣image.getwidth(空)和image.getHeight(空)返回有效結果的所有像素。
除了增加堆大小之外,還有其他的方法嗎?
多大的圖像?你用Xmx來增加內存嗎?爲什麼不使用ImageIO.read(URL)和朋友來獲取BufferedImage的圖像? – akarnokd 2009-08-02 17:14:17
我很困惑,爲什麼你需要ImageIcon,以及爲什麼你需要用圖形上下文繪製圖像。如果只用`try/catch`塊迭代`images`會發生什麼? – banjollity 2009-08-02 17:15:47
@ kd304 圖像可以是任意大小。我從掃描儀中提取它們。我用來從掃描儀獲取圖像的代碼返回對java.awt.Image對象的引用。 我無法通過向JVM傳遞參數來增加內存,因爲我在applet中執行此操作,而且我不想打擾用戶進行配置。 – 2009-08-02 20:10:28