如何将字节数组转换为Bitmap

Vas*_*asu 112 sqlite android bytearray bitmap

我想存储图像SQLite DataBase.我试图用它来存储BLOBString,在这两种情况下,它存储的图像,并可以获取,但是当我将其转换为Bitmap使用 BitmapFactory.decodeByteArray(...)它返回null.

我使用过这段代码,但它返回null

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
Run Code Online (Sandbox Code Playgroud)

Utt*_*tam 270

试试这个:

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();
Run Code Online (Sandbox Code Playgroud)

如果bitmapdata是字节数组,那么get Bitmap就像这样完成:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);
Run Code Online (Sandbox Code Playgroud)

返回已解码的Bitmap,或者null如果图像无法解码.

  • 如果图像处于您尝试解码的其他格式,则无法对其进行解码 (2认同)
  • 如果我需要按顺序多次执行这样的操作怎么办?每次创建新的Bitmap对象不是很耗费资源吗?我可以以某种方式将我的数组解码为现有的位图吗? (2认同)

Jul*_*ian 26

Uttam的答案对我没有用.我做的时候我就是空的:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);
Run Code Online (Sandbox Code Playgroud)

在我的例子中,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);
Run Code Online (Sandbox Code Playgroud)

检查https://developer.android.com/reference/android/graphics/Bitmap.Config.html以获取不同的颜色选项

  • 什么是mBitmaps? (2认同)