4

拡張現実アプリにZxingライブラリを使用する方法を教えてもらえますか?Zxingを使用する最も簡単な方法はインテントを使用することですが、バーコードアプリを使用できないようにカメラビューが必要です。

メインアクティビティにSurfaceHolder.Callback追加され、次のメソッドを上書きするがあります。

@Override
public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();

    try {
        mCamera.setPreviewDisplay(holder);
    } catch (IOException e) {
        Log.d(TAG, "Can not set surface holder");
    }

    mCamera.startPreview();

    Parameters parameters = mCamera.getParameters();
    parameters.setPreviewSize(1280, 720);
    parameters.setPictureSize(1280, 720);
    mCamera.setParameters(parameters);

    QrCodeReader reader = new QrCodeReader();
    mCamera.setPreviewCallback(reader);
}

設定された画像サイズはリストにあるため、使用可能である必要がありますparameters.getSupportedPictureSizes()

そして、QrCodeReader実装するクラスのこのメソッドPreviewCallback

private Result result;
private MultiFormatReader reader = new MultiFormatReader();
private boolean init = false;

public QrCodeReader(){
        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType,
              Object>();
    hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
    reader.setHints(hints);
}

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
    PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data,
          1280, 720, 0, 0, 1280, 720, true);
    HybridBinarizer hybBin = new HybridBinarizer(source);
    BinaryBitmap bitmap = new BinaryBitmap(hybBin);

try {
        result = reader.decodeWithState(bitmap);
        Log.d("Result", "Result found!");
    } catch (NotFoundException e) {
        Log.d(TAG, "NotFoundException");
    } finally {
        reader.reset();
    }
}

Logcatには。のみが表示されますNotFoundException

4

1 に答える 1

1

NotFoundException正常です。フレームにバーコードがない場合、それが結果です。これは、それ自体が間違っているという意味ではありません。スキャンを続けます。

于 2012-12-02T13:34:42.987 に答える