android - Android CameraX 如何实现广角/缩小
问题描述
我尝试使用CameraX api为我的应用内相机实现广角选项,但遇到了一个问题 -CameraControl.setZoomRatio
允许在ZoomState.getMinZoomRatio()
和之间设置缩放ZoomState.getMaxZoomRatio()
,在我测试过的手机minZoomRatio
上1.0f
。同一部手机支持缩小到0.5f
系统摄像头。
当前片段我如何初始化相机:
private var camera: Camera? = null
private var imageCapture: ImageCapture? = null
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(binding.viewFinder.surfaceProvider)
}
imageCapture = ImageCapture.Builder()
.setFlashMode(ImageCapture.FLASH_MODE_AUTO)
.build()
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
cameraProvider.unbindAll()
camera = cameraProvider.bindToLifecycle(
this, cameraSelector, preview, imageCapture
)
viewModel.onCameraStarted()
} catch (exc: Exception) {
Timber.e(exc)
}
},
ContextCompat.getMainExecutor(this)
)
}
当前捏到缩放实现:
val scaleGestureDetector = ScaleGestureDetector(this,
object : ScaleGestureDetector.SimpleOnScaleGestureListener() {
override fun onScale(detector: ScaleGestureDetector): Boolean {
val camera = camera ?: return false
val zoomState = camera.cameraInfo.zoomState.value ?: return false
val scale = zoomState.zoomRatio * detector.scaleFactor
val finalScale =
scale.coerceIn(MIN_ZOOM, MAX_ZOOM).coerceIn(zoomState.minZoomRatio, zoomState.maxZoomRatio)
camera.cameraControl.setZoomRatio(finalScale)
return true
}
})
binding.viewFinder.setOnTouchListener { view, event ->
view.performClick()
scaleGestureDetector.onTouchEvent(event)
return@setOnTouchListener true
}
我的问题是可以使用CameraX api使用广角相机(或实现0.5f
变焦),还是我必须使用Camera2重写整个实现。
解决方案
推荐阅读
- swift - 使用未解析的标识符`displayMessage`
- java - Java Minesweeper - 非方板计数地雷在错误的地方
- django - 查询一定数量的对象django
- java - ASM:在类的方法中获取局部变量名称和值
- wordpress - GDPR 和嵌入 Youtube 视频
- spring-integration - Spring 集成 - XpathPayloadEndpointMapping - 无法理解且没有此类文档
- cuda - 将数组(具有不同长度)的数组处理到 CUDA 内核
- html - 根据图像大小自动设置图像高度和宽度
- ng-bootstrap - 引导程序 4.0.0 的角度构建错误
- lets-encrypt - 无法设置,让我们加密