# BufferedImage verursacht OutOfMemoryError



## Fats (1. Feb 2007)

Hallo zusammen!

Ich versuche mit 
	
	
	
	





```
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
```
ein Bild zu erzeugen. Prinzipiel klappt das auch ganz gut. Lediglich wenn die Werte für Höhe und Breite etwas größer werden (> 8000x1600), dann bekomme ich die Fehlermeldung 
	
	
	
	





```
java.lang.OutOfMemoryError: Java heap space
```

Ich hab schon gefunden, daß man zB. mit 
	
	
	
	





```
java -Xmx 300m Klassenname
```
den Heap vergrößern könnte, aber ist das der richtige Weg? 

Viele Grüße
Fats


----------



## The_S (1. Feb 2007)

Ja, du hast in diesem Buffered-Image pro Pixel 4 Farbkanäle á 1 Byte. Macht bei einer Größe von 8000*1600 knapp 50MB. Entweder musste dein BufferedImage stückweise bearbeiten oder eben den heap erhöhen (je nach Anforderung).


----------



## Fats (1. Feb 2007)

"Stückweise bearbeiten" .. hmm ... *grübel* ... wie meinst Du das? Ich stell mir das jetzt so vor, daß ich wie mit Papier und Schere zB. mein Bild in 4 Teile "zerschneide". Links oben, rechts oben, links unten und rechts unten. Habe ich dann am Ende 4 Einzelbilder, sprich vier einzelne Dateien, oder kommt dabei wieder ein ganzes Bild raus??
Ich glaube, ich hätte Schwierigkeiten festzustellen, ob links oben das komplette "Hallo" steht oder zB. nur "Hall" und das "o" schon auf der rechten Seite liegt .... da leg ich mir glaub ich die Karten ...

Viele Grüße
Fats


----------



## The_S (1. Feb 2007)

Ohne genauen Hintergrund, wie du an das Bild kommst (aus Datei laden, selber generieren) und was du damit machen willst (anzeigen, speichern, ...), kann ich dir hier nur schlecht helfen  .


----------



## Fats (1. Feb 2007)

Ay  Also das Bild wird selbst erzeugt, und ich will es sowohl anzeigen als auch speichern. Wobei in dieser großen Auflösung muß es nicht zwangsläufig angezeigt werden, aber ich finds zum Testen ganz gut ...

Hier ein paar Zeilen :


```
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();             
g2d.setColor(Color.RED);
g2d.drawString("Hallo Echo",10,20);
g2d.dispose();       
ImageIO.write(img, image_type, new File(filename));
ImageIO.write(image, image_type, out);
```

(Out ist ein OutputStream, und wird von einem Servlet  durchgereicht ...)

Vielen Dank
Fats


----------



## The_S (1. Feb 2007)

Wenn du das Bild speichern willst, kommst du nicht drum herum (es sei denn du schreibst das Bild Stückchenweise in die Datei, was du aber selber implementieren müsstest) irgendwann mal im Code das BufferedImage als ganzes zu behandeln => HeapSize erhöhen.


----------



## Fats (1. Feb 2007)

OK, dann werd ich mal den Hebel ansetzen  
Vielen Dank! 

Viel Gruß
Fats


----------



## Fats (1. Feb 2007)

Ich muß doch noch mal kurz nachhaken. Wenn ich es recht verstanden habe, dann muß ich die HeapSize für eine spezielle Klasse ändern - also in meinem Fall für die Klasse java.awt.image.BufferedImage, richtig?

Demnach würde der Aufruf in der Console lauten 


```
java -Xmx100m java.awt.image.BufferedImage
```

Aber dabei erhalte ich folgende Meldung:


```
Exception in thread "main" java.lang.NoSuchMethodError: main
```

Was mache ich falsch? 

Viele Grüße
Fats


----------



## The_S (1. Feb 2007)

Du musst die HeapSize für die ganze VM setzen. Also beim Starten deines Programms einfach nach dem java die heapsize setzen.


----------



## Fats (1. Feb 2007)

Hmmm ... Das ganze ist letztendlich ne Webanwendung. Wenn ich Dich recht verstehe, dann müsste ich das irgendwie mit dem Tomcat verbasteln ... nur wie? Gibt es dafür eine Umgebungsvariable, die man wie das Catalina_Home setzen muß? Hast Du zufällig davon Ahnung? Sonst stell ich die Frage nochmal im Enterprise Forum ...


----------



## The_S (1. Feb 2007)

puuh ... ich programmier zwar beruflich Portlets, aber das mit WebSphere Rational Application Developer und selbst da musste ich noch nie die HeapSize verändern. Sry, kA stell besser mal ins J2EE Forum, denk mal KSG9|Sebastian hat davon Ahnung  .


----------



## Fats (1. Feb 2007)

OK, mach ich! Vielen Dank!! 

Fats


----------

