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


123

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

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

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

4
このページの「関連」セクションの最初の5-10リンクをお読みください。
マット

2
データベースに書き込む前にビットマップをエンコードしましたか?
ロニー

回答:


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
このような操作を連続して何度も実行する必要がある場合はどうなりますか?毎回新しいビットマップオブジェクトを作成するのはリソースを消費しませんか?どういうわけか、配列を既存のビットマップにデコードできますか?
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 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.