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

我试图按照建议的here在camera2中设置亮度:


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);

但是它仍然仅显示预览为深色图像,如下所示。

在这里看到区别:

原始相机:
android - Android Camera2增加亮度-LMLPHP

使用Camera2:
android - Android Camera2增加亮度-LMLPHP

我需要在第二个参数中传递什么值:
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6);

我保留6个,因为如文档中的建议:



但是亮度仍然没有影响。

最佳答案

这里是:

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

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());

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

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;
    }
}

10-08 12:31