Guten Tag,
es geht um folgendes:
Ich habe eine 2000x2000 pixel map. Diese soll sich um 3° Drehen, wenn man die rechte Pfeiltaste drückt.
Das funktioniert folgendermaßen:
Beim init ist folgendes enthalten:
Dieses komtm dann, wenn die map geladen ist:
Und dann passiert folgendes, wenn man auf die rechte bzw. linke Pfeiltaste drückt:
Danach wird das Bild halt gezeichnet, was auch funktioniert. Nach etwa sieben Drehungen aber, erscheint folgender Fehler:
Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.SinglePixelPackedSampleModel.createDataBuffer(SinglePixelPackedSampleModel.java:220)
at sun.awt.image.IntegerInterleavedRaster.<init>(IntegerInterleavedRaster.java:55)
at sun.awt.image.IntegerInterleavedRaster.createCompatibleWritableRaster(IntegerInterleavedRaster.java:515)
at java.awt.image.AffineTransformOp.createCompatibleDestImage(AffineTransformOp.java:448)
at java.awt.image.AffineTransformOp.filter(AffineTransformOp.java:209)
Der Fehler passiert bei der Zeile:
Was ist nun der Grund für den Fehler? Nach genau sieben Rotationen? Wird das alte Bild nicht aus dem Speicher gelöscht? Wenn ja, wie kann ich das rauslöschen? Ein System.gb() vor dem bio.filter hat nicht geholfen. Rotieren funktioniert mit einem kleineren Bild (z.B. 32*32 px) super(gibt keinen error). Ist die map einfach zu groß?
Danke für Eure Antworten!
Finn
es geht um folgendes:
Ich habe eine 2000x2000 pixel map. Diese soll sich um 3° Drehen, wenn man die rechte Pfeiltaste drückt.
Das funktioniert folgendermaßen:
Beim init ist folgendes enthalten:
Code:
MediaTracker mt = new MediaTracker(this);
mt.addImage(arena, 0);
try {
mt.waitForID(0);
}
catch (InterruptedException ie) {
}
Code:
Tarena = new BufferedImage(2000, 2000, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) Tarena.getGraphics();
//arena ist das Image was auf die 2000x2000 px map verweist
g.drawImage(arena, 0, 0, null);
Code:
bio = new AffineTransformOp(AffineTransform.getRotateInstance(3.0* Math.PI / 180, Xchar, Ychar),AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
Tarena = bio.filter(Tarena, null);
Danach wird das Bild halt gezeichnet, was auch funktioniert. Nach etwa sieben Drehungen aber, erscheint folgender Fehler:
Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.SinglePixelPackedSampleModel.createDataBuffer(SinglePixelPackedSampleModel.java:220)
at sun.awt.image.IntegerInterleavedRaster.<init>(IntegerInterleavedRaster.java:55)
at sun.awt.image.IntegerInterleavedRaster.createCompatibleWritableRaster(IntegerInterleavedRaster.java:515)
at java.awt.image.AffineTransformOp.createCompatibleDestImage(AffineTransformOp.java:448)
at java.awt.image.AffineTransformOp.filter(AffineTransformOp.java:209)
Der Fehler passiert bei der Zeile:
Code:
Tarena = bio.filter(Tarena, null);
Was ist nun der Grund für den Fehler? Nach genau sieben Rotationen? Wird das alte Bild nicht aus dem Speicher gelöscht? Wenn ja, wie kann ich das rauslöschen? Ein System.gb() vor dem bio.filter hat nicht geholfen. Rotieren funktioniert mit einem kleineren Bild (z.B. 32*32 px) super(gibt keinen error). Ist die map einfach zu groß?
Danke für Eure Antworten!
Finn