Android CameraX - 手动更改曝光补偿?

Šem*_*vić 3 java android autoexposurecompensation android-camerax

我在我的项目中使用 CameraX。我已经创建了预览用例并捕获用例。

final CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(lensFacing).build();

        previewBuilder = new Preview.Builder()
            .setTargetResolution(targetOutputSize)
            .setTargetRotation(rotation);

        preview = previewBuilder.build();

        final ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder()
            .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
            .setTargetResolution(targetOutputSize)
            .setTargetRotation(rotation);

        imageCapture = imageCaptureBuilder.build();
Run Code Online (Sandbox Code Playgroud)

一切正常。现在,我需要添加功能来手动更改曝光补偿,但我在官方文档或其他任何地方找不到如何执行此操作的任何参考。是否可以使用 CameraX,或者我需要切换到 Camera2 API?

请,欢迎任何帮助。

Šem*_*vić 6

CameraX 库有新版本。

def camerax_version = '1.0.0-beta09'
Run Code Online (Sandbox Code Playgroud)

首先将这些依赖项添加到 gradle 文件中。

// CameraX core library
implementation "androidx.camera:camera-core:$camerax_version"

// CameraX Camera2 extensions
implementation "androidx.camera:camera-camera2:$camerax_version"
Run Code Online (Sandbox Code Playgroud)

该版本支持曝光补偿,可在运行时调整。首先创建preview和takePicture用例,然后将这些用例绑定到cameraProvider。

 camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture);
Run Code Online (Sandbox Code Playgroud)

现在我们有了相机实例,它可以用来检索 CameraInfo,并从 CameraInfo 中检索 ExposureState。

ExposureState exposureState = camera.getCameraInfo().getExposureState();
Run Code Online (Sandbox Code Playgroud)

我们可以使用exposureState来检查设备是否支持曝光补偿

if (!exposureState.isExposureCompensationSupported()) return;
Run Code Online (Sandbox Code Playgroud)

接下来我们需要获取ExposureCompensation Range

Range<Integer> range = exposureState.getExposureCompensationRange();
Run Code Online (Sandbox Code Playgroud)

最后,我们可以通过以下方式设置ExposureCompensation指数

 if (range.contains(index))
     camera.getCameraControl().setExposureCompensationIndex(index);
Run Code Online (Sandbox Code Playgroud)