CameraX 是 Jetpack 提供的相机库,简化了相机开发的复杂性。本文将深入讲解如何在 Compose 中集成 CameraX。
一、相机预览
val previewView = remember { PreviewView(context) }
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview
)
AndroidView(factory = { previewView })
二、拍照功能
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.build()
imageCapture.takePicture(
outputOptions,
executor,
object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(output: OutputFileResults) {
// 保存成功
}
}
)
三、图像分析
val imageAnalyzer = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.also { analysis ->
analysis.setAnalyzer(executor) { imageProxy ->
// 处理图像(二维码识别等)
imageProxy.close()
}
}
四、最佳实践
- ✅ 使用 CameraX 而非 Camera2
- ✅ 正确绑定生命周期
- ✅ 请求权限后再初始化
- ✅ 使用 DisposableEffect 释放资源
- ✅ 支持前后摄像头切换
总结
- PreviewView:显示相机预览
- ImageCapture:拍照功能
- VideoCapture:录像功能
- ImageAnalysis:实时分析