Як перетворити байтовий масив у Bitmap


123

Я хочу зберігати зображення в SQLite DataBase. Я намагався зберігати його, використовуючи, BLOBі Stringв обох випадках він зберігає зображення і можу отримати його, але коли я конвертую його у Bitmapвикористання, BitmapFactory.decodeByteArray(...)повертайте 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якщо зображення не вдалося розшифрувати.


2
зображення не вдалося розшифрувати, якщо воно знаходиться в іншому форматі, з якого ви намагаєтесь розшифрувати
lxknvlk

2
Що робити, якщо мені потрібно виконати таку операцію багато разів послідовно? Хіба це не потребує ресурсів для створення нового об'єкта Bitmap кожного разу? Чи можу я якось декодувати свій масив у існуючу растрову карту?
Олексій Семенюк

Я публікую іншу відповідь, коли у вас просто буфер пікселя зображення. Мені завжди було нульовим через відсутність, висота та колір у моєму буфері. Сподіваюся, це допомагає!
Джуліан

31

Відповідь Uttam не працював для мене. Мені просто стає недійсним, коли я роблю:

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

У моєму випадку бітмапдати мають лише буфер пікселів, тому функція 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.