Cara mengonversi array byte ke Bitmap

123

Saya ingin menyimpan gambar di SQLite DataBase. Saya mencoba menyimpannya menggunakan BLOBdan String, dalam kedua kasus itu menyimpan gambar dan dapat mengambilnya tetapi ketika saya mengubahnya untuk Bitmapmenggunakannya BitmapFactory.decodeByteArray(...)mengembalikan null.

Saya telah menggunakan kode ini, tetapi mengembalikan nol

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
Vasu
sumber
4
Silakan baca 5-10 link pertama di bagian "Terkait" di halaman ini.
Mat
2
Apakah Anda menyandikan bitmap sebelum menulis ke database?
Ronnie

Jawaban:

284

Coba saja ini:

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();

Jika bitmapdatabyte array kemudian Bitmapmenyelesaikannya seperti ini:

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

Mengembalikan hasil dekode Bitmap, atau nulljika gambar tidak dapat didekodekan.

Uttam
sumber
2
gambar tidak dapat didekodekan jika dalam format lain yang Anda coba dekode dari
lxknvlk
2
Bagaimana jika saya perlu melakukan operasi seperti itu berkali-kali secara berurutan? Bukankah menghabiskan sumber daya untuk membuat objek Bitmap baru setiap saat? Dapatkah saya mendekode array saya ke dalam bitmap yang sudah ada?
Alex Semeniuk
Saya memposting jawaban yang berbeda ketika Anda hanya memiliki buffer dari piksel gambar. Saya selalu mendapatkan null karena kurangnya dengan, tinggi dan warna di buffer saya. Semoga membantu!
Julian
31

Jawaban Uttam tidak berhasil untuk saya. Saya baru saja mendapatkan null ketika saya melakukan:

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

Dalam kasus saya, bitmapdata hanya memiliki buffer piksel, jadi tidak mungkin untuk fungsi decodeByteArray menebak lebar, tinggi, dan bit warna mana yang digunakan. Jadi saya mencoba ini dan berhasil:

//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);

Periksa https://developer.android.com/reference/android/graphics/Bitmap.Config.html untuk opsi warna yang berbeda

Julian
sumber
2
apa itu mBitmaps?
pengguna924