Подтвердить что ты не робот

Создать Bitmap из byteArray в android

Я хочу создать растровое изображение из bytearray.

Я пробовал следующие коды

Bitmap bmp;

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

и

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

Но, когда я пытаюсь инициализировать объект Canvas с помощью растрового изображения, например

Canvas canvas = new Canvas(bmp);

Это приводит к ошибке

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

Затем, как получить измененное битовое изображение из байтаArray.

Спасибо заранее.

4b9b3361

Ответ 1

Для создания Canvas вам нужен изменяемый Bitmap.

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

Изменить: Как сказал Ной Сейдман, вы можете сделать это, не создавая копию.

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