Bitmap Problem

T

Tom299

Stammgast
122
Hallo,

ich hab mir eine kleine App gebastelt, wo ich drauf malen / schreiben kann (zwecks Unterschrift). Dafür hab ich einfach ne View genommen und erzeuge eine Bitmap und ein Canvas und male darauf.
Weiterhin hab ich eine Load- und Save-Funktion drin, um das aktuelle Bitmap zu Speichern oder zu Laden. Das klappt alles wunderbar.

Jetzt wollte ich eine Undo-Funktion einbauen, um z.B. die letzten 5 Schritte rückgängig zu machen. Sprich, die letzten 5 Bitmaps muß ich mir merken und bei einem Undo das vorletzte anzeigen.

Problem ist nun: ich hab die Bitmaps in eine ArrayList gelegt:
Code:
private ArrayList<Bitmap> listBitmaps = new ArrayList<Bitmap>();


if (listBitmaps.size() == 5) {
	listBitmaps.remove(0);
}
listBitmaps.add(bitmap);

die Bilder sind auch in der Liste vorhanden. Wenn ich allerdings nun ein Bild aus der Liste nehme, und genau wie beim Laden den gleichen Code nehme, um das Undo-Bild anzuzeigen, passiert einfach NICHTS.

hier das laden:
Code:
    public void loadBitmap() {
    	String path = Environment.getExternalStorageDirectory() + "/blabla/images/picture.png";
    	Bitmap bmp = BitmapFactory.decodeFile(path);
    	if (bmp != null) {
    		if (canvas != null) {
    			canvas.drawBitmap(bmp, 0, 0, null);
    			invalidate();
    		}
    	}
    }

hier undo:
Code:
Bitmap bmp = listBitmaps.get(undoCounter);
    if (bmp != null) {
        if (canvas != null) {
           canvas.drawBitmap(bmp, 0, 0, null);
           invalidate();
        }
    }

Der einzige Unterschied liegt darin, daß ich das Bild beim Laden von SD-Karte hole und beim Undo aus der ArrayList. Leider funktioniert das mit der ArrayList nicht, und ich weiß nicht wieso.

Hab mir jetzt temporär mal die Undo-Bilder auf die SD-Karte gespeichert, und siehe da, wenn ich sie dann Lade werden sie auch angezeigt.

Aber wieso funktioniert das mit der ArrayListe nicht? Ich leg doch die Bitmaps direkt rein. Kann mir jemand weiterhelfen?


Gruß,
Tom
 
oh man, nach mehrstündigem suchen und googlen hab ich es doch noch rausgefunden:

Code:
listBitmaps.add(bitmap.copy(Config.RGB_565, true));

man muß eine kopie der bitmap erzeugen und das true gibt an, daß es mutable ist. darauf muß man auch erst mal kommen ...


na dann frohe weihnachten :thumbsup:
 
  • Danke
Reaktionen: DieGoldeneMitte
Ich hatte zwar schon den Verdacht, dass es etwas mit den darunter liegenden DS zu tun haben könnte. Aber da wäre ich nie drauf gekommen.

Frohes Fest!
 

Ähnliche Themen

W
  • WuDiDong
Antworten
3
Aufrufe
767
jogimuc
J
S
Antworten
4
Aufrufe
995
Sempervivum
S
R
Antworten
3
Aufrufe
1.630
Ritartet
R
Zurück
Oben Unten