BitmapFactory.decodeByteArrayでできたbitmapについて

3,935 views
Skip to first unread message

miyaji

unread,
Jul 20, 2011, 1:25:15 PM7/20/11
to 日本Androidの会
お世話になっております。

Zxingを利用したQRコードの読み取りを実装しています。

Camera.PreviewCallbackで得た、byte[]をBitmapFactory.decodeByteArray利用して
bitmap化、
その後Zxingを利用した画像の解析へ、といった流れで実装しようと思っているのですが、

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length,opts);

で取得したbitmapが何度やってもnullになってしまいます。
dataはbyte[]で値が入っていることは確認しております。

BitmapFactory.decodeByteArrayでnullが返ってくる…みたいなページは検索して見かけたのですが、
解決法まで発見することができませんでした。


何か可能性がございましたら、教えていただけますと幸いです。

よろしくお願いいたします。

以下に該当のCamera.PreviewCallback を掲載いたします
--------------
BitmapFactory.decodeByteArray(data, 0, data.length,opts);

private final Camera.PreviewCallback previewCallback =
new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Log.i(TAG, "onPreviewFrame");
camera.setPreviewCallback(null);

BitmapFactory.Options opts = new
BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length,opts);

Result result =
mDecoder.decode(bitmap, mResolution.x,
mResolution.y,
getFrameRect());
if (result != null) {
previewCount = 0;
BarcodeFormat code = result.getBarcodeFormat();
Log.i(TAG, "preview success(" + code + ", "
+ result.getText() + ")");

// QR_CODE形式のバーコードのみ続きの処理を行う
if(code == BarcodeFormat.QR_CODE){
Bitmap img = mDecoder.getResultBitmap0();
//mResultDialog.set(img, result);
//mResultDialog.show();
} else {
// QR_CODE形式意外のバーコードの場合は
// 警告ダイアログを表示する
mCamezon.showIncorrectDialog(code.toString());
}
} else {
Log.i(TAG, "preview failed");
if (previewCount < TRY_PREVIEW) {
Log.i(TAG, "retry preview");
previewCount++;
requestPreview();
} else {
Log.i(TAG, "give up preview");
previewCount = 0;
// 解析不能なので、再びオートフォーカスで
// 画像取得しなおす
requestAutoFocus();
}
}
}
};

Hiroshi SAKURAI

unread,
Jul 20, 2011, 8:41:01 PM7/20/11
to android-g...@googlegroups.com
桜井と申します。

onPreviewFrameに渡されるデータはYUV420なので、
そのままではBitmapにできないのだと思います。

froyo以降でしたら、
1. YuvImageクラスで一度JPEGにする。
2. BitmapFactoryでJPEGをBitmapにする。
とするのが簡単だと思います。

参考:
https://groups.google.com/group/android-sdk-japan/browse_thread/thread/09f3545c7f7cfdac/018d2eb85fb9cb44?hl=ja
http://code.google.com/p/android/issues/detail?id=823

--
Hiroshi SAKURAI

2011/7/21 miyaji <miyajima.da...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

Reply all
Reply to author
Forward
0 new messages