Android Camera2增加亮度

Shy*_*dda 17 android android-camera2

我在我的应用程序中使用android camera2拍摄连续图像,这时我使用camera2获得的图像预览亮度与原始相机相比非常暗.我看到了这个,但答案中没有类似的要求.

我试图设置camera2亮度的建议在这里:

请注意,此控件仅在android.control.aeMode!= OFF时有效.即使android.control.aeLock == true,此控件也会生效.

captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, true);
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6);
Run Code Online (Sandbox Code Playgroud)

但它仍然显示预览为暗图像,如下所示.

看到这里的区别:

原装相机: 在此输入图像描述

使用Camera2: 在此输入图像描述

我需要传递的值是什么,作为第二个参数:

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6);
Run Code Online (Sandbox Code Playgroud)

我保持6,因为正如doc的建议:

例如,如果曝光值(EV)步长为0.333,则"6"表示+2 EV的曝光补偿; -3意味着-1 EV的曝光补偿.

但亮度仍然没有影响..

Ron*_*kar 7

这里是:

onConfigured()和中添加以下代码unlockFocus()

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());
Run Code Online (Sandbox Code Playgroud)

通过使用上面的代码,您将获得更好的预览。但是您捕获的图片将保持原样。为了获得更好的画面,请在中使用以下相同的代码 captureStillPicture()

captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getRange());
Run Code Online (Sandbox Code Playgroud)

getRange是:

    private Range<Integer> getRange() {
    CameraCharacteristics chars = null;
    try {
        chars = mCameraManager.getCameraCharacteristics(mCameraId);
        Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
        Range<Integer> result = null;
        for (Range<Integer> range : ranges) {
            int upper = range.getUpper();
            // 10 - min range upper for my needs
            if (upper >= 10) {
                if (result == null || upper < result.getUpper().intValue()) {
                    result = range;
                }
            }
        }
        if (result == null) {
            result = ranges[0];
        }
        return result;
    } catch (CameraAccessException e) {
        e.printStackTrace();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请问如何用CameraX 做到这一点? (2认同)

Edd*_*ala 0

首先,不要锁定自动曝光——调整曝光补偿时不需要锁定自动曝光。

其次,您是否使用新的捕获请求调用了 CameraCaptureSession.setRepeatingRequest ?