web-dev-qa-db-ja.com

バイト配列をビットマップに変換する方法

SQLite DataBaseに画像を保存します。 BLOBStringを使用して保存しようとしましたが、どちらの場合も画像を保存して取得できますが、BitmapFactory.decodeByteArray(...)を使用してBitmapに変換するとnullを返します。

このコードを使用しましたが、nullを返します

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

これを試してください:

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を返します。

260
Uttam

Uttamの答えは私にはうまくいきませんでした。私がやったとき、私はただnullになりました:

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 でさまざまな色のオプションを確認します

22
Julian