1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Bitmap Problem

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Tom299, 23.12.2011.

  1. Tom299, 23.12.2011 #1
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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
     
  2. Tom299, 23.12.2011 #2
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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:
     
    DieGoldeneMitte bedankt sich.
  3. DieGoldeneMitte, 23.12.2011 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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!
     

Diese Seite empfehlen