2011-09-09 13 views
31

Quiero crear un mapa de bits de un bytearray.crear mapa de bits de byteArray en android

Me trataron los siguientes códigos

Bitmap bmp; 

bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 

y

ByteArrayInputStream bytes = new ByteArrayInputStream(data); 
BitmapDrawable bmd = new BitmapDrawable(bytes); 
bmp = bmd.getBitmap(); 

Pero, cuando estoy Tring para inicializar el objeto de la lona con el mapa de bits como

Canvas canvas = new Canvas(bmp); 

Conduce a una error

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

Luego, cómo obtener un mapa de bits mutable de un byteArray.

Gracias de antemano.

Respuesta

58

Necesita un mutable Bitmap para crear el Canvas.

Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 
Bitmap mutableBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true); 
Canvas canvas = new Canvas(mutableBitmap); // now it should work ok 

Editar: Como dijo Noah Seidman, puede hacerlo sin crear una copia.

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inMutable = true; 
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, options); 
Canvas canvas = new Canvas(bmp); // now it should work ok 
+0

gracias a su funcionamiento – surendra

+1

¿No crea Bitmap.copy() una nueva matriz por completo? Esto parece una pérdida de memoria. Me encantaría saber cómo obtener un mapa de bits mutable directamente. –

+0

Desafortunadamente, no conozco otra forma de obtener un mapa de bits mutable (de un 'ByteArray', al menos). –

Cuestiones relacionadas