我想将一些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