Bayt dizisini Bitmap'e dönüştürme


123

Görüntüyü içinde saklamak istiyorum SQLite DataBase. Kullanarak saklamaya çalıştım BLOBve Stringher iki durumda da görüntüyü depoluyor ve geri alabiliyor, ancak onu Bitmapkullanmaya dönüştürdüğümde BitmapFactory.decodeByteArray(...)null döndürüyor.

Bu kodu kullandım ama boş döndürüyor

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

4
Lütfen bu sayfadaki "İlgili" bölümündeki ilk 5-10 bağlantıyı okuyun.
Mat

2
Veritabanına yazmadan önce bit eşlemi kodladınız mı?
Ronnie

Yanıtlar:


284

Sadece şunu dene:

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

Eğer bitmapdatao zaman almak bayt dizisi olan Bitmapböyle yapılır:

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

Kodu çözülmüş Bitmapveya nullgörüntünün kodu çözülememişse döndürür .


2
kod çözmeye çalıştığınız başka bir formatta görüntünün kodu çözülemedi
lxknvlk

2
Ya böyle bir işlemi sırayla defalarca yapmam gerekirse? Her seferinde yeni Bitmap nesnesi oluşturmak kaynak tüketmiyor mu? Dizimi bir şekilde mevcut bitmap'e çözebilir miyim?
Alex Semeniuk

Görüntü pikselinin sadece bir arabelleğine sahip olduğunuzda farklı bir cevap gönderiyorum. Tamponumdaki uzunluk, yükseklik ve renk eksikliğinden dolayı hep boş kalıyordum. Umarım yardımcı olur!
Julian

31

Uttam'ın cevabı benim için işe yaramadı. Sadece yaptığımda boş aldım:

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

Benim durumumda, bitmapdata yalnızca piksel arabelleğine sahiptir, bu nedenle decodeByteArray işlevinin genişliğin, yüksekliğin ve renk bitlerinin hangisini kullandığını tahmin etmesi imkansızdır. Ben de bunu denedim ve işe yaradı:

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

Farklı renk seçenekleri için https://developer.android.com/reference/android/graphics/Bitmap.Config.html adresini kontrol edin


2
mBitmaps nedir?
user924
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.