1

この投稿に続いて、 ZXing lib をポートレート モードに変更することに成功しました。また、下の img のようにプレビュー rect を正方形に変更します。しかし、実際にスキャンする rect はプレビュー rect の半分のサイズでしかないことがわかりました。qrcodeをプレビュー rect の上半分に合わせた場合にのみ、ZXing デモ アプリのようにすばやくスムーズに結果を得ることができます。

CameraManagerの getFramingRect ()getFramingRectInPreview()メソッドの両方をチェックしてプレビュー四角形を変更し、ViewFinderView.onDraw() からこれらの 2 つの四角形を出力できます。しかし、どの rect が実際にDETECTING用であるかはまだわかりません。それはフレームですか、それともpreviewFrameですか?または、他の何か?プレビューの四角形を検出四角形に合わせるにはどうすればよいですか???

@Override
public void onDraw(Canvas canvas) {
    if (cameraManager == null) {
        return; // not ready yet, early draw before done configuring
    }
    Rect frame = cameraManager.getFramingRect();
    Rect previewFrame = cameraManager.getFramingRectInPreview();
    if (frame == null || previewFrame == null) {
        return;
    }
    int width = canvas.getWidth();
    int height = canvas.getHeight();

    Log.d(TAG, "@ FramingRect : " + frame.left + "/" + frame.top + "/" + frame.right + "/" + frame.bottom);
    Log.d(TAG, "@ Preview FramingRect : " +
            previewFrame.left + "/" + previewFrame.top + "/" + previewFrame.right + "/" + previewFrame.bottom);

ここに画像の説明を入力

getFramingRectInPreview()この例外で previewRect を調整するたびに発生します。

java.lang.IllegalArgumentException: Crop rectangle does not fit within image data.
    at com.google.zxing.PlanarYUVLuminanceSource.<init>(PlanarYUVLuminanceSource.java:50)
    at com.google.zxing.client.android.camera.CameraManager.buildLuminanceSource(CameraManager.java:339)
    at com.google.zxing.client.android.DecodeHandler.decode(DecodeHandler.java:87)
    at com.google.zxing.client.android.DecodeHandler.handleMessage(DecodeHandler.java:55)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at com.google.zxing.client.android.DecodeThread.run(DecodeThread.java:104)

try&error の後、previewRect を 100 だけ下に移動し、右に 60 だけ移動できます。検出プロセスがよりスムーズになるようです。

4

1 に答える 1

1

getFramingRect()は画面に対して相対getFramingRectInPreview()的であり、カメラからのプレビュー画像データに対して相対的です。これらは、幅と高さの比率が同じになるように計算されますが、コードを変更した場合、この部分が正しく変更されていない可能性があります。

于 2013-07-12T09:10:38.173 に答える