Создать 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.
Спасибо заранее.
Ответы
Ответ 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