本页面介绍了如何使用 CameraX 捕获高质量图像。您可以使用 ImageCapture
类及其关联方法来完成此操作。
关键概念
本文档中讨论的主要概念如下:
- 存储方法: 您可以将图像捕获到内存缓冲区,也可以直接捕获到文件。
- 执行器:
ImageCapture
使用执行器来处理回调和 I/O 操作。您可以自定义这些执行器以获得更好的性能和控制。 - 捕获模式: 您可以配置捕获模式,以优化延迟或图像质量。
存储方法
有两种使用 ImageCapture
捕获图像的方法。它们都使用 ImageCapture.takePicture()
的一个重载。
文件: 使用
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)
将捕获的图像直接保存到磁盘文件。- 这是最常见的照片捕获方式。
内存: 使用
takePicture(Executor, OnImageCapturedCallback)
接收捕获图像的内存缓冲区。- 这对于实时图像处理或分析非常有用。
执行器
调用 takePicture
时,您需要传递一个 Executor
以及一个 OnImageCapturedCallback
或 OnImageSavedCallback
函数。Executor
运行回调并处理任何由此产生的 I/O。
拍照
要拍照,您需要设置相机,然后调用 takePicture
。
设置相机
要设置相机,请创建 CameraProvider
。然后,创建一个 ImageCapture
对象。使用 ImageCapture.Builder()
Kotlin
val imageCapture = ImageCapture.Builder()
.setTargetRotation(view.display.rotation)
.build()
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Java
ImageCapture imageCapture =
new ImageCapture.Builder()
.setTargetRotation(view.getDisplay().getRotation())
.build();
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);
拍照
配置相机后,调用 takePicture()
捕获图像。此示例演示了如何使用 takePicture()
将图像保存到磁盘
Kotlin
fun onClick() {
val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...)).build()
imageCapture.takePicture(outputFileOptions, cameraExecutor,
object : ImageCapture.OnImageSavedCallback {
override fun onError(error: ImageCaptureException)
{
// insert your code here.
}
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
// insert your code here.
}
})
}
Java
public void onClick() {
ImageCapture.OutputFileOptions outputFileOptions =
new ImageCapture.OutputFileOptions.Builder(new File(...)).build();
imageCapture.takePicture(outputFileOptions, cameraExecutor,
new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
// insert your code here.
}
@Override
public void onError(ImageCaptureException error) {
// insert your code here.
}
}
);
}
此代码段的要点如下:
ImageCapture.OutputFileOptions
允许您配置保存位置和元数据。- 在这里,
OutputFileOptions.Builder()
使用File
对象来确定保存位置。
- 在这里,
takePicture()
函数使用提供的选项和执行器异步捕获图像。OnImageSavedCallback
提供成功和失败的回调。onImageSaved()
回调处理成功的图像捕获,并提供对保存的图像结果的访问。onError()
回调处理图像捕获错误。
其他选项
如需了解配置 ImageCapture
的其他方法,请参阅配置优化、闪光灯和文件格式指南。
更多资源
如需详细了解 CameraX,请查阅以下资源:
Codelab
代码示例