返回
用 CameraX 几行代码实现摄像头预览和拍照
Android
2023-09-10 01:22:08
前言
CameraX 是一个用于 Android 平台的相机 API,它可以帮助您轻松构建相机应用程序。CameraX 提供了一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0。
集成 CameraX
要使用 CameraX,您需要在项目中添加以下依赖项:
implementation 'androidx.camera:camera-core:1.0.0'
implementation 'androidx.camera:camera-camera2:1.0.0'
implementation 'androidx.camera:camera-lifecycle:1.0.0'
implementation 'androidx.camera:camera-view:1.0.0'
初始化 CameraX
在您的活动或片段中,您需要初始化 CameraX。您可以使用以下代码来完成此操作:
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
// CameraX is now initialized. You can start using it.
}, ContextCompat.getMainExecutor(this))
创建预览用例
要创建预览用例,您可以使用以下代码:
val previewUseCase = Preview.Builder()
.build()
创建拍照用例
要创建拍照用例,您可以使用以下代码:
val imageCaptureUseCase = ImageCapture.Builder()
.build()
绑定用例到生命周期
要将用例绑定到生命周期,您可以使用以下代码:
cameraProvider.bindToLifecycle(
this,
previewUseCase,
imageCaptureUseCase
)
启动预览
要启动预览,您可以使用以下代码:
previewUseCase.setSurfaceProvider(previewView.surfaceProvider)
previewUseCase.enable()
拍照
要拍照,您可以使用以下代码:
imageCaptureUseCase.takePicture(ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageCapturedCallback() {
override fun onCaptureSuccess(image: ImageProxy) {
// Image captured successfully.
}
override fun onError(exception: ImageCaptureException) {
// Image capture failed.
}
})
示例代码
以下是一个完整的示例代码,演示了如何使用 CameraX 来实现摄像头预览和拍照功能:
class MainActivity : AppCompatActivity() {
private lateinit var cameraProvider: ProcessCameraProvider
private lateinit var previewUseCase: Preview
private lateinit var imageCaptureUseCase: ImageCapture
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
cameraProvider = cameraProviderFuture.get()
previewUseCase = Preview.Builder()
.build()
imageCaptureUseCase = ImageCapture.Builder()
.build()
cameraProvider.bindToLifecycle(
this,
previewUseCase,
imageCaptureUseCase
)
previewUseCase.setSurfaceProvider(previewView.surfaceProvider)
previewUseCase.enable()
}, ContextCompat.getMainExecutor(this))
}
fun takePicture(view: View) {
imageCaptureUseCase.takePicture(ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageCapturedCallback() {
override fun onCaptureSuccess(image: ImageProxy) {
// Image captured successfully.
}
override fun onError(exception: ImageCaptureException) {
// Image capture failed.
}
})
}
}
结论
CameraX 是一个强大的工具,它可以帮助您轻松构建相机应用程序。本文只是介绍了 CameraX 的简单使用,其中包含相机预览、拍照、和简单的图片侦分析。如果您想了解更多关于 CameraX 的信息,可以查阅官方文档或在线搜索相关资料。