【问题标题】:Camera AF_TRIGGER_START doesn't start focusing onTouch相机 AF_TRIGGER_START 未开始对焦于触摸
【发布时间】:2016-01-24 04:29:15
【问题描述】:

我有一个使用 camera2 Api 的相机应用程序,我将 onTouchListener 实现到我用于从相机预览的 TextureView,我想要的是当用户点击屏幕以便能够像内置的 Android 相机一样专注于该区域时.我不知道它出了什么问题,当我使用 AF_MODE_AUTO 时它可以工作,但它并不精确,它只关注屏幕中心的内容。

这是我的代码:

        mTextureView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:

                Rect rect = cameraCharacteristics
                        .get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
                Size size = cameraCharacteristics
                        .get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE);
                int areaSize = 200;
                int right = rect.right;
                int bottom = rect.bottom;
                int viewWidth = mTextureView.getWidth();
                int viewHeight = mTextureView.getHeight();
                int ll,
                rr;
                Rect newRect;
                int centerX = (int) event.getX();
                int centerY = (int) event.getY();
                ll = ((centerX * right) - areaSize) / viewWidth;
                rr = ((centerY * bottom) - areaSize) / viewHeight;

                int focusLeft =  clamp(ll, 0, right);
                int focusBottom = clamp(rr, 0, bottom);

                newRect = new Rect(focusLeft, focusBottom, focusLeft
                        + areaSize, focusBottom + areaSize);
                MeteringRectangle meteringRectangle = new MeteringRectangle(
                        newRect, 500);
                MeteringRectangle[] meteringRectangleArr = { meteringRectangle };


                System.out.println("metering rectARR" + meteringRectangleArr);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_TRIGGER,
                        CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_REGIONS,
                        meteringRectangleArr);

                mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_TRIGGER,
                        CameraMetadata.CONTROL_AF_TRIGGER_START);

                try {
                    mCameraCaptureSession.setRepeatingRequest(
                            mPreviewCaptureRequest,
                            mSessionCaptureCallback,
                            mBackgroundHandler);
                } catch (CameraAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                break;
            }

            return true;

        }
    });
}

【问题讨论】:

  • 您可能需要将 3A 设置为自动:mPreviewCaptureRequestBuilder.set( CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);

标签: android camera touch focus area


【解决方案1】:

我对@9​​87654321@ 进行了分支并将其更改为使用CaptureRequest.CONTROL_AF_MODE_AUTO 而不是CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE

您可以从 git 获取项目并对其进行测试 - https://github.com/pinhassi/android-Camera2Basic

【讨论】:

    【解决方案2】:

    在 CaptureRequest.Builder 上设置 CONTROL_AF_TRIGGER_CANCEL 后,您需要调用 CaptureSession.capture(mPreviewCaptureRequestBuilder.build(),mCallback,mHandler)

    mPreviewCaptureRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_TRIGGER,
                        CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
    //TODO call capture
    //TODO set new focus region
    //TODO call capture/setRepeatingRequest
    

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多