Как преобразовать байтовый массив в Bitmap

123

Я хочу сохранить изображение в формате SQLite DataBase. Я попытался сохранить его, используя BLOBи String, в обоих случаях он хранит изображение и может получить его, но когда я конвертирую его для Bitmapиспользования, BitmapFactory.decodeByteArray(...)он возвращает null.

Я использовал этот код, но он возвращает null

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
ВАСУ
источник
4
Пожалуйста, прочтите первые 5-10 ссылок в разделе «Связанные» на этой странице.
Мат,
2
Вы кодировали растровое изображение перед записью в базу данных?
Ронни

Ответы:

284

Просто попробуйте это:

Bitmap bitmap = BitmapFactory.decodeFile("/path/images/image.jpg");
ByteArrayOutputStream blob = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /* Ignored for PNGs */, blob);
byte[] bitmapdata = blob.toByteArray();

Если bitmapdataэто массив байтов, то получение Bitmapвыполняется следующим образом:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

Возвращает декодированное Bitmap, или nullесли изображение не может быть декодировано.

Uttam
источник
2
изображение не может быть декодировано, если оно находится в другом формате, из которого вы пытаетесь декодировать
lxknvlk
2
Что, если мне нужно выполнить такую ​​операцию несколько раз подряд? Разве создание нового объекта Bitmap каждый раз не требует больших затрат ресурсов? Могу ли я каким-то образом преобразовать свой массив в существующее растровое изображение?
Alex Semeniuk
Я публикую другой ответ, когда у вас просто буфер пикселя изображения. Я всегда получал null из-за отсутствия в моем буфере with, height и color. Надеюсь, поможет!
Julian
31

Ответ Уттама у меня не сработал. Я просто получил ноль, когда это сделал:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

В моем случае bitmapdata имеет только буфер пикселей, поэтому функция decodeByteArray не может угадать, какие биты ширины, высоты и цвета используют. Итак, я попробовал это, и это сработало:

//Create bitmap with width, height, and 4 bytes color (RGBA)    
Bitmap bmp = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(bitmapdata);
bmp.copyPixelsFromBuffer(buffer);

Проверьте https://developer.android.com/reference/android/graphics/Bitmap.Config.html для различных вариантов цвета.

юлианский
источник
2
что такое mBitmaps?
user924