2011-09-09 1 views
31

Voglio creare una bitmap da un bytearray.crea Bitmap da byteArray in Android

ho provato i seguenti codici

Bitmap bmp; 

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

e

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

Ma, quando ho Tring per inizializzare l'oggetto Canvas con l'immagine bitmap come

Canvas canvas = new Canvas(bmp); 

Essa conduce ad un error

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

Quindi come ottenere una bitmap mutabile da un byteArray.

Grazie in anticipo.

risposta

58

Per creare lo Canvas è necessario un modificabile.

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 

Modifica: come diceva Noah Seidman, è possibile farlo senza creare 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

grazie al suo funzionamento – surendra

+1

Non Bitmap.copy() crea un nuovo array interamente? Sembra uno spreco di memoria. Mi piacerebbe sapere come ottenere direttamente un Bitmap mutabile. –

+0

Sfortunatamente, non conosco altro modo per ottenere un Bitmap mutabile (almeno da un 'ByteArray'). –