本页介绍了如何使用 CameraX 拍摄高质量图片。您可以使用 ImageCapture 类及其关联方法来完成此操作。
主要概念
以下是本文档中讨论的主要概念:
- **存储方法**:您可以将图片拍摄到内存 缓冲区或直接拍摄到文件中。
- 执行器:
ImageCapture使用执行器来处理回调和 I/O 操作。您可以自定义这些执行器,以获得更好的性能和控制。 - **拍摄模式**:您可以配置拍摄模式,以针对 延迟时间或图片质量进行优化。
存储方法
您可以通过两种方式使用 ImageCapture 拍摄图片。它们各自使用 ImageCapture.takePicture() 的重载:
文件:使用
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)将拍摄的图片直接保存到 磁盘上的文件中。- 这是最常见的照片拍摄方式。
内存 :使用
takePicture(Executor, OnImageCapturedCallback)接收拍摄图片的内存缓冲区。- 这对于实时图片处理或分析非常有用。
执行器
调用 takePicture 时,您需要传递 Executor 以及
OnImageCapturedCallback 或 OnImageSavedCallback 函数。Executor 会运行回调并处理任何生成的 IO。
拍照
如需拍照,请设置相机,然后调用 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
代码示例