CameraX 概览
CameraX 使用入门
CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。
虽然它利用的是 camera2 的功能,但使用的是更为简单且基于用例的方法,该方法具有生命周期感知能力。它还解决了设备兼容性问题,因此您无需在代码库中包含设备专属代码。这些功能减少了将相机功能添加到应用时需要编写的代码量。
最后,借助 CameraX,开发者只需两行代码就能利用与预安装的相机应用相同的相机体验和功能。 CameraX Extensions 是可选插件,通过该插件,您可以在支持的设备上向自己的应用中添加人像、HDR、夜间模式和美颜等效果。
开发者使用 CameraX,借助名为“用例”的抽象概念与设备的相机进行交互。目前提供的用例如下:
注意:一定要先申请、开启 Camera 权限:
预览用例会生成一个 SurfaceTexture 以流式传输相机输入。它还提供对 View 进行剪裁、缩放或旋转以确保其正常显示所需的其他信息。
当相机处于活动状态时,图片预览就会流式传输到此 SurfaceTexture。可将 SurfaceTexture 连接到 TextureView 或 GLSurfaceView。
PreviewConfig --> Preview
PreviewConfig config = new PreviewConfig.Builder().build();
Preview preview = new Preview(config);
preview.setOnPreviewOutputUpdateListener(
new Preview.OnPreviewOutputUpdateListener() {
@Override
public void onUpdated(Preview.PreviewOutput previewOutput) {
// Your code here. For example, use previewOutput.getSurfaceTexture()
// and post to a GL renderer.
});
});
CameraX.bindToLifecycle((LifecycleOwner) this, preview);
图片分析用例为您的应用提供了可供 CPU 访问以执行图片处理、计算机视觉或机器学习推断的图片。该应用会实现在每个帧上运行的 Analyzer 方法。
ImageAnalysisConfig --> ImageAnalysis
ImageAnalysisConfig config =
new ImageAnalysisConfig.Builder()
.setTargetResolution(new Size(1280, 720))
.build();
ImageAnalysis imageAnalysis = new ImageAnalysis(config);
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image, int rotationDegrees) {
// insert your code here.
}
});
CameraX.bindToLifecycle((LifecycleOwner) this, imageAnalysis, preview);
图片拍摄用例旨在拍摄高分辨的优质照片,不仅提供简单的相机手动控制功能,还提供自动白平衡、自动曝光和自动对焦 (3A) 功能。调用程序负责决定如何使用拍摄的照片,包括以下选项:
ImageCaptureConfig --> ImageCapture
ImageCaptureConfig config =
new ImageCaptureConfig.Builder()
.setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
.build();
ImagesCapture imageCapture = new ImageCapture(config);
//将用例绑定到生命周期
//如果Android Studio抱怨“this”不是一个生命周期所有者
//尝试重新构建项目或更新appcompat依赖项
//版本1.1.0或更高。
CameraX.bindToLifecycle((LifecycleOwner) this, imageCapture, imageAnalysis, preview);
CameraXApp 示例
官方 CameraX 示例