【问题标题】:Camera 2 - API - Image capturing is not working when using Front Camera?摄像头 2 - API - 使用前置摄像头时图像捕捉不起作用?
【发布时间】:2016-02-18 09:47:18
【问题描述】:

在我的相机应用程序中,我有一个按钮可以将相机正面或背面改变,我可以使用后置摄像头拍摄和保存图像,但是当我切换到前置摄像头时,我无法拍摄图像。这就是我将相机切换到正面或背面的方式。

   ImageView switch_camera =(ImageView) rootview.findViewById(R.id.imageView7);
        switch_camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


         //       facing = characteristics.get(CameraCharacteristics.LENS_FACING);

                if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
                    //isfrontcam=true;
                    try {

                        //manager.openCamera(getBackFacingCameraId(manager), mStateCallback, mBackgroundHandler);
                        closeCamera();
                        openCamera(mTextureView.getWidth(), mTextureView.getHeight(),"0");
                        Log.e("opening ","BackCam");
                        facing = 1;

                    } catch (SecurityException e) {
                        e.printStackTrace();

                    } catch (Exception e) {
                        e.printStackTrace();

                    }
                } else if (facing != null && facing == CameraCharacteristics.LENS_FACING_BACK) {
                    //  isfrontcam = true;
                    try {
                        //manager.openCamera(getFrontFacingCameraId(manager), mStateCallback, mBackgroundHandler);

                      //  characteristics = manager.getCameraCharacteristics("1");

                        closeCamera();
                        openCamera(mTextureView.getWidth(), mTextureView.getHeight(),"1");

                        Log.e("opening ", "FrontCam");
                        String str = getBackFacingCameraId(manager);
                        facing= 0;
                        Log.e("str", "id" + str);

                    } catch (SecurityException e) {
                        e.printStackTrace();

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

点击捕获按钮时,我正在调用此函数来捕获图像;

 private void lockFocus() {
        try {
            // This is how to tell the camera to lock focus.
            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
                    CameraMetadata.CONTROL_AF_TRIGGER_START);
            // Tell #mCaptureCallback to wait for the lock.
            mState = STATE_WAITING_LOCK;
            mCaptureSession.capture(mPreviewRequestBuilder.build(),mCaptureCallback,
                    mBackgroundHandler);
        } catch (CameraAccessException e) {

            e.printStackTrace();
        }
    }

【问题讨论】:

    标签: android camera android-camera2


    【解决方案1】:

    检查您的 CameraCaptureSession.CaptureCallback : 可能相机的状态为 CONTROL_AF_STATE_INACTIVE。因为它正在等待对焦……所以这张照片永远不会被拍摄。

    应该是这样的

                case STATE_WAITING_LOCK: {
                    Integer afState = result.get(CaptureResult.CONTROL_AF_STATE);
                    if (afState == null) {
                        captureStillPicture();
                    } else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState ||
                            CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState ||
                             CaptureResult.CONTROL_AF_STATE_INACTIVE == afState /*add this*/) {
                        // CONTROL_AE_STATE can be null on some devices
                        Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
                        if (aeState == null || aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
                            mState = STATE_PICTURE_TAKEN;
                            captureStillPicture();
                        } else {
                            runPrecaptureSequence();
                        }
                    }
                    break;
                }
    

    【讨论】:

    • 为我工作 :) 谢谢
    • 也许你知道如何解决我的问题,我怎样才能在相机对焦的情况下拍照?有我的问题stackoverflow.com/questions/40185407/…提前谢谢!
    • 这个答案允许我在标准模拟器中运行 Camera2basic 示例。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多