2010-09-11 12 views
25

Ich bin wie so eine Bitmap aus einer Ressource geladen:Laden einer Ressource auf ein veränderbares Bitmap

Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image); 

Was ich tun möchte ist, einige Änderungen an der Bitmap, bevor es in auf der großen Leinwand gezogen wird mein zeichnen Methode (Es wäre verschwenderisch, viele Zeichnungen in meiner Hauptschleife zu wiederholen, wenn es nicht ändern wird). Ich mache die Änderungen an der Bitmap mit den folgenden:

Canvas c = new Canvas(mBackground); 
c.drawARGB(...); // etc 

So natürlich bekomme ich eine Ausnahme

java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor 

So zu vermeiden, dass ich eine Kopie der Bitmap gemacht, so dass es wandelbar ist

Welche vermeiden das Problem, aber es verursacht manchmal OutOfMemoryExceptions, wissen Sie keine besseren Möglichkeiten zu erreichen, was ich will?

Antwort

11

Es gibt mehrere Möglichkeiten, eine Kopie davon zu erstellen. Dieses Thema könnte Ihnen helfen: http://www.anddev.org/how_to_modify_the_image_file-t513.html

+4

Kopieren innerhalb Speicher für mich funktioniert nicht, wenn es Originalbild ist, ich einen Weg gefunden MappedByteBuffer mit, ich habe es hier gebloggt: http: // sudarnimalan. blogspot.com/2011/09/android-convert-immutable-bitmap-into.html –

1

Sie besser RapidDecoder verwenden würde.

import rapid.decoder.BitmapDecoder; 

Bitmap mBackground = BitmapDecoder.from(res, R.drawable.image) 
     .mutable().decode(); 

Works für API-Ebene 8.

Verwandte Themen