本页介绍了如何使用 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
代码示例