java.lang.OutOfMemoryError beim Rotieren eines Images

Status
Nicht offen für weitere Antworten.

el_vital

Aktives Mitglied
Ich verwende folgene Routiene zum drehen eines Bildes:

Code:
static BufferedImage tilt(BufferedImage src, double angle) {        

   int w = src.getWidth(), h = src.getHeight();
   int newW = (int)(Math.round(h * Math.abs(Math.sin(angle))+w * Math.abs(Math.cos(angle))));
   int newH = (int)(Math.round(h * Math.abs(Math.cos(angle))+w * Math.abs(Math.sin(angle))));
   AffineTransform at = AffineTransform.getTranslateInstance((newW-w)/2,(newH-h)/2);
   at.rotate(angle, w/2, h/2);
   GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
   GraphicsDevice gd = ge.getDefaultScreenDevice();
   GraphicsConfiguration gc = gd.getDefaultConfiguration(); 
   BufferedImage dst = gc.createCompatibleImage(newW, newH);
   Graphics2D g = dst.createGraphics();
   g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
   RenderingHints.VALUE_INTERPOLATION_BILINEAR);
   g.setPaint(Color.MAGENTA);
   g.fillRect(0,0,newW,newH);
   g.drawRenderedImage(src, at);
   g.dispose();
   return dst;        
}

Das ist der Aufruf:

Code:
private void jLabelDrehenRechtsMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:

    
 if(bBildGeladen)
 {
     
    dWinkelAktuell  = dWinkelAktuell + dWinkelZumVerstellen;
    
    if(dWinkelAktuell > 360)
           dWinkelAktuell = 360 -dWinkelAktuell;
    
    ImgOriginal = tilt(buffImgOriginal, Math.toRadians(dWinkelAktuell)); 
    
    int iTempWidth = ImgOriginal.getWidth(null); 
    int iTempHeight = ImgOriginal.getHeight(null);
    double dVerhaeltnis = (double)iTempWidth/(double)iTempHeight;
    
    iGlobHeight =  (int) (iGlobWidth / dVerhaeltnis);
    repaint();
 }
}

Verwende ich kleine Bilder, funktioniert es ohne Probleme. Bei großen kommt die Exception.

Hat jemand eine Idee wieso?
 

0x7F800000

Top Contributor
memory leak...
kennt man ja nicht so unbedingt, wenn man immer mit GC proggt :D
ich weiß jetzt nicht so genau, was da mit den images los ist, aber bei Images und Sounddaten muss man den speicher explizit freigeben habe ich mal irgendwo gelesen... flush()
in deinem code sieht man zwar "new BufferedImage" aber kein dazugehöriges flush, dadurch wird der speicher irgendwann zugemüllt...

Frage: wieso brauchst du überhaupt irgendwelche neue bilder, und irgendein anderes bild rotiert hinzuzeichnen? ???:L
 

el_vital

Aktives Mitglied
Andrey hat gesagt.:
memory leak...
kennt man ja nicht so unbedingt, wenn man immer mit GC proggt :D
ich weiß jetzt nicht so genau, was da mit den images los ist, aber bei Images und Sounddaten muss man den speicher explizit freigeben habe ich mal irgendwo gelesen... flush()
in deinem code sieht man zwar "new BufferedImage" aber kein dazugehöriges flush, dadurch wird der speicher irgendwann zugemüllt...

Frage: wieso brauchst du überhaupt irgendwelche neue bilder, und irgendein anderes bild rotiert hinzuzeichnen? ???:L

meinst du mit "new BufferedImage" "BufferedImage dst"? Oder wo ist da ein new?
 

el_vital

Aktives Mitglied
dst.flush(); bringt leider auch keine besserung. Mit einer etwas kleineren datei kann ich es unendlich drehen. Mit einer großen ist beim zweiten Dreh schluß.
 

el_vital

Aktives Mitglied
Ich sitze hier schon seit zwei Tagen und werde langsam verrückt. Ich finde in Java einfach keine Möglichkeit ein großes Bild ohne Exception zu drehen.

Problemstellung:

am Anfang wird ein Bild in ein Image Img und ein BufferedImage BuffImageOriginal geladen.
Dann möchte ich das BuffImageOriginal um einen beliebigen Winkel drehen, es dann dem Img zuweisen und das Img dann gedreht darstellen. Mit kleinen Bildern funktioniert es. Ab ca. 1500x1500 ist kein Drehen mehr möglich, es kommt sofort beim ersten Dreh ein Fehler. Ich habe schon alle Methoden des Drehens ausprobiert die ich finden konnte.

Hat jemand vielleicht Code, das auch große Dateien drehen kann?
 

el_vital

Aktives Mitglied
ich muss dazu sagen, dass es ein Applet ist. Kann es daran liegen? Ist bei einem Applet der Speicher begrenzt?
 

el_vital

Aktives Mitglied
das Problem liegt am Heap-Speicher. So wie es aussieht werde ich mein Programm nicht mit Java realisieren können, schon garnicht als applet. Wirklich schade.

Hier könnt Ihr sehen und testen was ich programmieren wollte: www.passbild-generator.de/online

versucht ein Großes Bild und das Drehen wird wegen Heap überlauf nicht funktionieren. Diese Speicherbegrenzung unter Java finde ich jetzt echt blöd und nicht Zeitgemess.

Für diese Anwendung benötige ich Bilder mit hohen Auflösung.
 

0x7F800000

Top Contributor
Hey, das sieht ja richtig scharf aus! :toll:
Lässt sich sehr angenehm steuern, alles kann man da rumschieben, transparenzeffekte sind cool...
Echt hübsch.

relativ Große (1024x768px) Bilder lassen sich da problemlos laden und drehen usw usw.
Mit richtig großen (4096x3072px) kann das Applet echt nichts mehr anfangen, lädt die nicht mal.
Aber an "Java Allgemein" kann es nicht liegen, denn beide bilder habe ich mit einem java-programm erzeugt... Das sind höchstens irgendwelche Einschränkungen für applets. Starte es per WebStart und gut ist. Wenn da Quake2 problemlos reinpasst, wird's für ein photo ja wohl auch reichen ;)
 

el_vital

Aktives Mitglied
Andrey hat gesagt.:
Hey, das sieht ja richtig scharf aus! :toll:
Lässt sich sehr angenehm steuern, alles kann man da rumschieben, transparenzeffekte sind cool...
Echt hübsch.

relativ Große (1024x768px) Bilder lassen sich da problemlos laden und drehen usw usw.
Mit richtig großen (4096x3072px) kann das Applet echt nichts mehr anfangen, lädt die nicht mal.
Aber an "Java Allgemein" kann es nicht liegen, denn beide bilder habe ich mit einem java-programm erzeugt... Das sind höchstens irgendwelche Einschränkungen für applets. Starte es per WebStart und gut ist. Wenn da Quake2 problemlos reinpasst, wird's für ein photo ja wohl auch reichen ;)

ich habe es eben auf die schnelle in eine Application umgebaut. Das selbe Problem.
 

0x7F800000

Top Contributor
Also, wie gesagt, wüsste nicht warum's an heap-space liegen sollte, die 4096x3072px-Dinger haben ja locker in java-programme reingepasst... Was ist denn das... 1 Int pro pixel, 4096x3072px... So um die 50MB oder was? ???:L Das kann doch nicht sein dass da plötzlich der speicher ausgeht :bahnhof:
 

el_vital

Aktives Mitglied
Andrey hat gesagt.:
Also, wie gesagt, wüsste nicht warum's an heap-space liegen sollte, die 4096x3072px-Dinger haben ja locker in java-programme reingepasst... Was ist denn das... 1 Int pro pixel, 4096x3072px... So um die 50MB oder was? ???:L Das kann doch nicht sein dass da plötzlich der speicher ausgeht :bahnhof:
lade mal 2 oder 3 davon
 
G

Guest

Gast
reservieren. Und zwar schon seit fast einem Jahr.
Auf diese Weise:
Code:
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
<PARAM name="java_arguments" value="-Xmx128m">
</APPLET>

Das wird sicherlich einigen Helfen.

Versucht mein Applet nochmal. Es ist jetzt mit 512MB Speicher. Ich kann meine Anwendung jetzt also doch zu Ende programmieren.

Danke an alle.
 

el_vital

Aktives Mitglied
Na ja, ich hatte wieder mal vergessen mich einzulogen. Oben ist ein Link zu dem Applet, dass jetzt mit 512MB Heap Speicher läuft. Der obere Post ist nicht komplett. Ich wollte schreiben: "Es ist doch möglich mehr Heap Speicher zu reservieren. Und zwar schon seit fast einem Jahr."
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
D java.lang.outofmemoryerror java heap space bei Hashtable Java Basics - Anfänger-Themen 3
neurox java.lang.OutOfMemoryError: Java heap space Java Basics - Anfänger-Themen 18
B java.lang.OutOfMemoryError: Java heap space bei Musikplayer Java Basics - Anfänger-Themen 7
G Waveplayer - java.lang.OutOfMemoryError Java Basics - Anfänger-Themen 2
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
JaVaN0oB java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 3
P java.lang.ClassCastException Bedeutung und Lösung Java Basics - Anfänger-Themen 3
J Erste Schritte java.lang.NoClassDefFoundError Java Basics - Anfänger-Themen 4
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
T Compiler-Fehler java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 2
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N jodaTime java.lang.IllegalArgumentException: Invalid format Java Basics - Anfänger-Themen 3
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
F Erste Schritte java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
R java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 1
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
V java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
M java.lang.Enum.valueOf(Unknown Source) Java Basics - Anfänger-Themen 2
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
C Hilfe!!! java.lang.ClassCastException Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
K Caused by: java.lang.NoClassDefFoundError: org/mindrot/jbcrypt/BCrypt Java Basics - Anfänger-Themen 0
S java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 4
OnDemand java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 9
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
J Klassen java.lang.String - lexikographisches Sortieren Java Basics - Anfänger-Themen 5
P Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 3
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H Classpath java.lang.NoClassDefFoundError externe Libary Java Basics - Anfänger-Themen 4
M Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse Java Basics - Anfänger-Themen 12
X Applet Fehler: java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 45
B java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
H java.lang.IndexOutOfBoundsException bei verschachtelter ArrayList Java Basics - Anfänger-Themen 9
S Fehler: "java.lang.NullPointerException" Java Basics - Anfänger-Themen 6
V java.lang.NoSuchMethodError Java Basics - Anfänger-Themen 2
J java.lang.math asin() Java Basics - Anfänger-Themen 18
I Erste Schritte Ausführfehler: java.lang.NullPointerException Java Basics - Anfänger-Themen 3
R Compiler-Fehler java.lang.ArrayIndexOutOfBoundsException, warum? Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
G java.lang.ClassNotFoundException Java Basics - Anfänger-Themen 4
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 10
X Interpreter-Fehler "java.lang.NullPionterException: null" bei BlueJ Java Basics - Anfänger-Themen 10
P java.lang.ClassCastException Java Basics - Anfänger-Themen 2
D java.lang.NoSuchMethodError: main Java Basics - Anfänger-Themen 11
S expected java.lang.string but found char Java Basics - Anfänger-Themen 5
S Umgebungsvariable Exception in thread "main" java.lang.UnsatisfiedLinkError: no J3D in java.librar y.path Java Basics - Anfänger-Themen 15
S Compiler-Fehler java.lang.SecurityException: Invalid signature file digest for Manifest main attributes Java Basics - Anfänger-Themen 5
M Klassen Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 2
A Compiler-Fehler unreported exception java.lang.Exception; must be caught or declared to be thrown Java Basics - Anfänger-Themen 7
K Fehlermeldung: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 Java Basics - Anfänger-Themen 4
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
J java.lang.NullPointerException Java Basics - Anfänger-Themen 18
K Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 6
F Ich kenn mich nicht mehr aus - 'java.lang.NoSuchMethodError: main' in Applet? Java Basics - Anfänger-Themen 2
K OOP java.lang.NullPointerException Java Basics - Anfänger-Themen 2
N iText PDF Fehler, java.lang.ClassNotFoundException: com.lowagie.text.Phrase Java Basics - Anfänger-Themen 7
M java.lang.NumberFormatException-Problem Java Basics - Anfänger-Themen 6
H java.lang.NoSuchMethodError: Java Basics - Anfänger-Themen 5
J java.lang.UnsatisfiedLinkError: Java Basics - Anfänger-Themen 9
T List in java.lang.Object... einfügen Java Basics - Anfänger-Themen 12
M java.lang.StringTokenizer Java Basics - Anfänger-Themen 4
I java.lang.String cannot be cast to OBJEKT Java Basics - Anfänger-Themen 8
P java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory Java Basics - Anfänger-Themen 1
Y java.lang.NoSuchMethodError: main Java Basics - Anfänger-Themen 9
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben