SSブログ

Android+ZxingでQRコード操作 [Android]

この記事はこちらに引越しました。
https://minimashia.net/android-zxing-qr/(新しいタブで開
く)

nice!(1)  コメント(6)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 1

コメント 6

kenji

とても参考になる解説ありがとうございます.

一つだけ気になるところがあるのですが
android update -p . -t TargetID
のところは
android update project -p . -t TargetID
じゃないでしょうか?
by kenji (2012-11-05 15:15) 

Wiアシア

> kenjiさん

コメントありがとうございます。
うわぁ、本当です。project忘れてますね。修正します。
わざわざご指摘頂きましてありがとうございました!
by Wiアシア (2012-11-06 08:52) 

ノット

とても参考になります。

1つ質問なのですが、QRコード読む際に、
データ部分だけではなくて、誤り訂正レベルやそのQRコードのバージョンを
知る方法はないでしょうか?
以上お分かりでしたら教えて下さい。
by ノット (2013-07-01 13:11) 

Wiアシア

>ノットさん

コメントありがとうございます。
ただ、私は簡単なアプリを試しで作っただけで終わってしまったので、誤り訂正レベルなどを読み込む機能までは調べませんでした。
とはいえ、そういった情報を読み込むアプリもあるみたいなので、なにかしら方法はあるんでしょうね〜
by Wiアシア (2013-07-07 21:14) 

pochi

教えてください。

camera2で撮影したQR-CODEをこのページの変換に従ったて変換しzxingに投げているのですがうまく行かないのです。
 ==>。  Toast.makeText(getApplicationContext(), "Not Found", Toast.LENGTH_SHORT).show();に行ってしまうのです。

カメラから渡されたbitmapにはQR-CODEが写っていました。
サイズは1080*1920でbinaryBitmapの中のbits/
heigthとwidthをみると同じく1080と1920が入っていました。
これでうまく変換されているのかなと思っているのですが、QR-CODEを認識してくれないのです。

何かアドバイスをいただけないでしょうか。
「ここをチェックしてみたら」と言うようなアドバイスでも欲しいのです。


mCamera2.takePicture(new ImageReader.OnImageAvailableListener() {

private static final String ENCORD_NAME = "ISO-8859-1";

@Override
public void onImageAvailable(ImageReader reader) {
// 撮れた画像をImageViewに貼り付けて表示。

final Image image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);

Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
// image.close();

// オリジナルソース
// mImageView.setImageBitmap(bitmap);
// mImageView.setVisibility(View.VISIBLE);
// mTextureView.setVisibility(View.INVISIBLE);
// ここまで

LuminanceSource source = new RGBLuminanceSource(bitmap);
Hashtable decodeHint = new Hashtable();

decodeHint.put(DecodeHintType.CHARACTER_SET, ENCORD_NAME);
decodeHint.put(DecodeHintType.TRY_HARDER, true);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));

image.close();

Reader reader2 = new MultiFormatReader();
Result result = null;
try {
result = reader2.decode(binaryBitmap);
String text = result.getText();
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Not Found", Toast.LENGTH_SHORT).show();
}
}
});
}

by pochi (2017-04-18 16:34) 

アシア

> pochiさん
私の知識が実用レベルじゃないのであまり有力な意見はできませんが、
・まずは例外の内容(Exception eの型やgetMessage()結果)を確認する(全てはココからかと)
・binaryBitmapを別ファイルに出力してみて、元データと同じQRコードが吐き出せるか確認する
・binaryBitmap(というかsource)の作り方を変えてみる(BufferedImageLuminanceSourceを使うとか)
あたりをまずはチェックして、「うまく行かない」と仰っているのが具体的にどううまく行っていないか特定するのがいいんではないでしょうか。
by アシア (2017-04-19 09:16) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。