2

私はかなり長い間私を悩ませている問題を抱えています。

ライブ プレビューを表示するカスタム カメラ アプリを入手しました。同様に、人々の顔に焦点を合わせるためにFaceDetectionを使用しています。ギャラリーで撮影した写真を確認すると、長方形が正しく表示されます。次のステップは、FaceDetection-Rectangle を Live-Preview に表示することです。そこで、Preview-Rectangle から座標を取得し、キャンバスで使用できる座標に変換するキャンバスを使用することにしました。

私の問題は、プレビューを正しく表示するために、プレビューを 90 度回転させる必要があったことです。したがって、描画する前にキャンバスのビューも回転すると、長方形が正しく表示され、右軸も移動します。ただし、長方形は左右に画面の外に移動でき、使用可能な高さの約半分しか使用しません。回転が原因だと思いますが、どうにかうまくいきません。誰かがアイデアを得ましたか?

スクリーンショット (赤い四角形では到達できない上部/下部を示すために紫色の線を追加しました): ここに画像の説明を入力

プレビュー:

        mCamera = Camera.open();
        mCamera.getParameters();
        mCamera.setDisplayOrientation(90);          
        mCamera.setFaceDetectionListener(new FaceDetectionListener() {

            @Override
            public void onFaceDetection(Face[] faces, Camera camera) {

                        if(mDraw != null) {
                            mDraw.update(f.rect, f);
                        }
                    }
                }
            }
        });
        mCamera.startFaceDetection();
}

private DrawOnTop  mDraw = null;
public void setDrawOnTop(DrawOnTop d) {
    this.mDraw = d;
}

上に描画:

public DrawOnTop(Context context) {
    super(context);
    myColor = new Paint();

    myColor.setStyle(Paint.Style.STROKE);
    myColor.setColor(Color.RED);
}

@Override
protected void onDraw(Canvas canvas) {
        rect.set((((rect.left+1000)*1000) / WIDTH_DIVISOR),(((rect.top+1000)*1000) / HEIGHT_DIVISOR),(((rect.right+1000)*1000) / WIDTH_DIVISOR),(((rect.bottom+1000)*1000) / HEIGHT_DIVISOR ));         
        setRotation(90);
        canvas.drawRect(rect, myColor);
}

public void update(Rect rect, Face face) {
    this.invalidate();
    this.rect = rect;
    this.face = face;
}

-------------------------------------------------- --------------------------------------


編集: これはまれではあるが既知のバグであり、これまでのところアプリケーションを横向きモードにする以外に解決策はないという結論に達しました。正常に動作しますが、ユーザーが操作しているパースペクティブに応じて、寸法が少し伸びたり縮んだりします。

4

1 に答える 1