いくつかの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.getwidth(ヌル)とimage.getHeight(ヌル)が、有効な結果を返すように、すべてのピクセルがロードされて得るために
image = new ImageIcon(image).getImage();
を配置する必要がありました。
ヒープサイズを増やす場合を除いてこれ以外の方法はありますか?
イメージでどのように大:あなたはおそらく
編集を扱う独自のイメージを転がりよりもこれを行うにはJavaライブラリを使用して方がいいでしょう? Xmxを使ってメモリを増やしますか?なぜImageIO.read(URL)や友達を使ってBufferedImageとして画像を取得しないのですか? – akarnokd
ImageIconが必要な理由と、なぜGraphicsコンテキストでイメージをペイントする必要があるのか、混乱しています。 'try/catch'ブロックだけで' images'を反復するとどうなりますか? – banjollity
@ kd304 画像のサイズは自由です。私はスキャナからそれらを取得しています。スキャナから画像を取得するために使用するコードは、java.awt.Imageオブジェクトへの参照を返します。 パラメータをJVMに渡すことでメモリを増やすことはできません。なぜなら、私はアプレットでそれをやっているので、ユーザーは設定を邪魔したくないからです。 –