создать растровое изображение из byteArray в Android - PullRequest
35 голосов
/ 09 сентября 2011

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

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

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

Тогда как получить изменяемое растровое изображение из byteArray.

Заранее спасибо.

1 Ответ

68 голосов
/ 09 сентября 2011

Вам нужен изменяемый Bitmap, чтобы создать 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

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...