如何解决Android CameraX-手动更改曝光补偿?
我正在为我的项目使用CameraX。我已经创建了预览useCase并捕获了useCase。
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"
此版本支持可以在运行时调整的曝光补偿。 首先创建预览和takePicure用例,然后将这些用例绑定到cameraProvider。
camera = cameraProvider.bindToLifecycle(this,cameraSelector,preview,imageCapture);
现在我们有了相机实例,可以用来检索CameraInfo,然后从CameraInfo中检索ExposureState。
ExposureState exposureState = camera.getCameraInfo().getExposureState();
我们可以使用ExposureState来检查设备是否支持曝光补偿
if (!exposureState.isExposureCompensationSupported()) return;
下一步,我们需要获取ExposureCompensation范围
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) )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。