5

ZXingバーコードスキャンライブラリの使用に成功しましたが、ランドスケープモードでのみ使用できます。

また、カメラのプレビューをポートレートモードに設定し、正しく(ストレッチせずに)表示することに成功しましたが、バーコードがまったく機能しなくなりました。カメラを正しく表示するために、「CameraConfigurationManager.java」の「setDesiredCameraParameters」に加えた変更は次のとおりです。

void setDesiredCameraParameters(Camera camera)
{
    Camera.Parameters parameters = camera.getParameters();
    Log.d(TAG, "Setting preview size: " + cameraResolution);
    setFlash(parameters);
    setZoom(parameters);
    camera.setDisplayOrientation(90);
    parameters.set("rotation", 90);
    parameters.setPreviewSize(cameraResolution.y, cameraResolution.x);
    camera.setParameters(parameters);
}

他の場所で言及されているいくつかの解決策を試しましたが、機能しないか、機能するがカメラのプレビューを正しく表示できません。例: ポートレートモードでZxingを使用する方法は? http://code.google.com/p/zxing/issues/detail?id=178#c46 https://github.com/pplante/zxing-android/issues

それが終わったら、長方形の位置とサイズをスキャンに合わせてカスタマイズする必要もあります。「CameraManager.java」の「setManualFramingRect」を変更する必要があることはわかっていますが、正しく行うかどうかはわかりません。そのためのコードは次のとおりです。

public void setManualFramingRect(Rect rect)
{
    if (initialized)
    {
        Point screenResolution = configManager.getScreenResolution();
        if (rect.right >= screenResolution.x)
            rect.right = screenResolution.x - 1;
        if (rect.left < 0)
            rect.left = 0;
        if (rect.bottom >= screenResolution.y)
            rect.bottom = screenResolution.y - 1;
        if (rect.top < 0)
            rect.top = 0;
        framingRect = rect;
        Log.d(TAG, "Calculated manual framing rect: " + framingRect);
        framingRectInPreview = null;
    }
    else
        _requestedFramingRect = new Rect(rect);
}

もちろん、私は「openDriver」を呼び出すように変更しました:

if (_requestedFramingRect != null)
    setManualFramingRect(_requestedFramingRect);

私を助けてください。


編集:今、私はそれがいくつかのデバイスで動作しないことを発見しました。最初はクラッシュします。デバッグすると、プレビューでもうまく機能しないことがわかります。

4

1 に答える 1

2

それだけではありません。たとえば、カメラの向きがデバイスの向きと同じでない場合、カメラ データを実際に「回転」する (または、垂直であるかのようにスキャンする) 必要があります。また、フロントカメラを使用する場合は、その回転が逆になるという事実を考慮する必要があります.

于 2012-04-12T12:43:31.687 に答える