PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Heap overflow bei BufferdImage


EcHo
2005-12-30, 00:29:37
Hi,

Ich habe eine Methode, die mir ein Int-Array in eine PNG-Datei schreibt - soweit so gut. Wenn das Array aber zu groß wird (z.B. 3000x3000) gibts ein:

"Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"

Die methode sieht wie folgt aus:


/**
* Write an integer- array in a PNG image.
*
* @param pixelMap
* @param name
* @throws IOException
*
* Assign the integer- array and the name to this methode,
* to write it to the file name.png in the local folder.
*/
public void writePNG (int[][] pixelMap , String name) throws IOException {
int width = pixelMap[0].length;
int height = pixelMap.length;

BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {

bImage.setRGB(x,y, pixelMap[y][x]);
}
}

File file = new File(name + ".png");
ImageIO.write(bImage,"png", file);
}




Wo ist der Fehler und wie kann ich ihn umgehen?

Unfug
2005-12-30, 00:43:11
Hi,

Ich habe eine Methode, die mir ein Int-Array in eine PNG-Datei schreibt - soweit so gut. Wenn das Array aber zu groß wird (z.B. 3000x3000) gibts ein:

"Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"

Die methode sieht wie folgt aus:


/**
* Write an integer- array in a PNG image.
*
* @param pixelMap
* @param name
* @throws IOException
*
* Assign the integer- array and the name to this methode,
* to write it to the file name.png in the local folder.
*/
public void writePNG (int[][] pixelMap , String name) throws IOException {
int width = pixelMap[0].length;
int height = pixelMap.length;

BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {

bImage.setRGB(x,y, pixelMap[y][x]);
}
}

File file = new File(name + ".png");
ImageIO.write(bImage,"png", file);
}




Wo ist der Fehler und wie kann ich ihn umgehen?
vllt hilft dir das weiter
http://h21007.www2.hp.com/cmdspp/QuestionAnswer/1,1764,8799E158-CF6A-11D6-975C-00306E0146CA,00.html

EcHo
2005-12-30, 01:30:51
Darauf hätte ich natürlich kommen können...

Hätte nicht gedacht, das der Stack in java so klein ausgelegt ist. :rolleyes:
Ich mach mir mal lieber noch einen Kaffee. :wink:

Dankeschön!

Senior Sanchez
2005-12-30, 09:47:10
Darauf hätte ich natürlich kommen können...

Hätte nicht gedacht, das der Stack in java so klein ausgelegt ist. :rolleyes:
Ich mach mir mal lieber noch einen Kaffee. :wink:

Dankeschön!

Standardmäßíg ist der Java Heap auch nicht so groß ausgelegt, denn eine große Zahl der Java Anwendungen braucht ja auch nicht soviel Speicher!

Bei deinem int-Array, was allein schon 36 MB groß ist, wundert das aber kaum und -Xmx, -Xms sollte da wunder helfen.