簡體   English   中英

Android CameraX - 手動更改曝光補償?

[英]Android CameraX - manually change exposure compensation?

我在我的項目中使用 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();

一切正常。 現在,我需要添加手動更改曝光補償的功能,但我在官方文檔或其他任何地方找不到任何參考資料。 是否可以使用 CameraX,或者我需要切換到 Camera2 API?

請,歡迎任何幫助。

看起來 CameraX API 下有一個Camera2Interop類,它允許您在內部更改值。 這是官方文檔: Camera2Interop.Extender

在構建 ImageCapture 之前,添加以下內容:

Camera2Interop.Extender(imageCaptureBuilder)
    .setCaptureRequestOption(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, value);

有新版本的 CameraX 庫。

def camerax_version = '1.0.0-beta09'

首先將這些依賴項添加到 gradle 文件中。

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

// CameraX Camera2 extensions
implementation "androidx.camera:camera-camera2:$camerax_version"

此版本支持可在運行時調整的曝光補償。 首先創建 preview 和 takePicure 用例,然后將這些用例綁定到 cameraProvider。

 camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture);

現在我們有了相機實例,它可用於檢索 CameraInfo,並且從 CameraInfo 檢索 ExposureState。

ExposureState exposureState = camera.getCameraInfo().getExposureState();

我們可以使用 ExposureState 來檢查設備是否支持曝光補償

if (!exposureState.isExposureCompensationSupported()) return;

接下來我們需要得到 ExposureCompensation Range

Range<Integer> range = exposureState.getExposureCompensationRange();

最后,我們可以通過以下方式設置 ExposureCompensation 指數

 if (range.contains(index))
     camera.getCameraControl().setExposureCompensationIndex(index);

如果您想知道相機何時完成更改曝光設置,請執行以下操作(camerax_version = '1.0.0'):

    lateinit var myCameraExposureListener: ListenableFuture<Int>

進而

        myCameraExposureListener =
        myCameraControl!!.setExposureCompensationIndex(exposureCompensationIndex);

    myCameraExposureListener.addListener({
        try {
            Log.v(TAG, "Changing Exposure Settings Completed")
        } catch (exception: Exception) {
            Log.v(TAG, "Changing Exposure Settings Failed")
        }
    }, ContextCompat.getMainExecutor(context) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM