如何将字节数组转换为位图


123

我想将图像存储在中SQLite DataBase。我尝试使用BLOB和存储它String,在两种情况下,它都存储图像并可以检索它,但是当我将其转换为Bitmap使用 BitmapFactory.decodeByteArray(...)它时,返回null。

我已使用此代码,但它返回null

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

4
请阅读本页“相关”部分中的前5-10个链接。

2
在写入数据库之前是否对位图进行了编码?
罗尼

Answers:


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 2015年

2
如果我需要依次多次执行该操作怎么办?每次创建新的Bitmap对象不是很耗资源吗?我可以以某种方式将数组解码为现有位图吗?
Alex Semeniuk 2015年

当您只有图像像素的缓冲区时,我会发布不同的答案。由于缓冲区中缺少with,height和color,我一直都为null。希望能帮助到你!
朱利安

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.