[英]How to get Exposure Compensation level from Android phone camera, via Java, when picture is taken?
[英]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.