2010-09-11 13 views
25

sto caricamento di una bitmap da una risorsa in questo modo:Caricamento di una risorsa a un bitmap mutabile

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

Quello che voglio fare è fare alcune modifiche al bitmap prima che venga attratto dal disegno principale della mia disegnare il metodo (Come sembrerebbe uno spreco ripetere molti disegni nel mio ciclo principale quando non cambierà). Sto facendo le modifiche al bitmap con il seguente:

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

Così, naturalmente, ottengo un'eccezione

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

Quindi, per evitare che ho fatto una copia della bitmap in modo che sia mutabile

Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true); 

Quale evitare il problema, tuttavia a volte causa OutOfMemoryExceptions, conoscere i modi migliori per ottenere ciò che voglio?

risposta

11

Esistono diversi modi per crearne una copia. Questa discussione potrebbe aiutarti: http://www.anddev.org/how_to_modify_the_image_file-t513.html

+4

copia all'interno della memoria non funziona per me se si tratta di immagine originale, ho trovato un modo utilizzando MappedByteBuffer, ho bloggato qui: http: // sudarnimalan. blogspot.com/2011/09/android-convert-immutable-bitmap-into.html –

1

È meglio utilizzare RapidDecoder.

import rapid.decoder.BitmapDecoder; 

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

Opere per il livello di API 8.

Problemi correlati