Android 開發 Camera2開發_3_處理預覽和拍照偏暗問題

經過調整曝光解決

參考:https://stackoverflow.com/questions/28429071/camera-preview-is-too-dark-in-low-light-android/49643140#49643140android

參考:https://blog.csdn.net/limingbocsdn/article/details/89176907ui

 

//設置預覽請求的方式
previewBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
 
...
 
//自動對焦
previewBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
//設置自動曝光幀率範圍
previewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());
 //對焦觸發器設置爲空閒狀態
previewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
captureSession.setRepeatingRequest(previewBuilder.build(),captureCallback, mainHandler);
 
 private Range<Integer> getRange() {
        CameraManager mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        CameraCharacteristics chars = null;
        try {
            chars = mCameraManager.getCameraCharacteristics(cameraID);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
        Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
 
        Range<Integer> result = null;
 
        for (Range<Integer> range : ranges) {
            //幀率不能過低,大於10
            if (range.getLower()<10)
                continue;
            if (result==null)
                result = range;
            //FPS下限小於15,弱光時能保證足夠曝光時間,提升亮度。range範圍跨度越大越好,光源足夠時FPS較高,預覽更流暢,光源不夠時FPS較低,亮度更好。
            else if (range.getLower()<=15 && (range.getUpper()-range.getLower())>(result.getUpper()-result.getLower()))
                result = range;
        }
        return result;
    }
相關文章
相關標籤/搜索