供应商扩展程序

CameraX 提供了用于访问设备专属供应商效果(例如散景、HDR 及其他功能)的 API。您可以利用该 API 查询特定扩展程序是否可在当前设备上使用并优先启用相应扩展程序。也就是说,如果该扩展程序在当前设备上可用,则会启用该扩展程序,否则将以适当方式降级。

供应商不需要实现所有效果和功能。供应商未实现的所有功能将默认为 CameraX 实现。默认实现会报告相应功能不可用并跳过启用操作。

启用图片拍摄效果

要将供应商扩展程序应用于 CameraX 用例,请创建一个 Extender 对象,该对象允许您配置 Builder,其中包含相应效果或功能的设置。查询扩展程序的可用性,因为如果扩展程序不可用,enableExtension() 调用将不执行任何操作。

要实现图片拍摄用例的扩展程序,请实现相应的图片拍摄扩展器,如以下代码示例所示:

Kotlin

    import androidx.camera.extensions.BokehExtender

    fun onCreate() {
        // Create a Builder same as in normal workflow.
        val builder = ImageCaptureConfig.Builder()

        // Create a Extender object which can be used to apply extension
        // configurations.
        val bokehImageCapture = BokehImageCaptureExtender.create(builder)

        // Query if extension is available (optional).
        if (bokehImageCapture.isExtensionAvailable()) {
            // Enable the extension if available.
            bokehImageCapture.enableExtension()
        }

        // Finish constructing configuration with the same flow as when not using
        // extensions.
        val config = builder.build()
        val useCase = ImageCapture(config)
        CameraX.bindToLifecycle(this as LifecycleOwner, useCase)
    }
    

Java

    import androidx.camera.extensions.BokehExtender;

    void onCreate() {
        // Create a Builder same as in normal workflow.
        ImageCaptureConfig.Builder builder = new ImageCaptureConfig.Builder();

        // Create a Extender object which can be used to apply extension
        // configurations.
        BokehImageCaptureExtender bokehImageCapture = new
                BokehImageCaptureExtender(builder);

        // Query if extension is available (optional).
        if (bokehImageCapture.isExtensionAvailable()) {
            // Enable the extension if available.
            bokehImageCapture.enableExtension();
        }

        // Finish constructing configuration with the same flow as when not using
        // extensions.
        ImageCaptureConfig config = builder.build();
        ImageCapture useCase = new ImageCapture(config);
        CameraX.bindToLifecycle((LifecycleOwner)this, useCase);
    }

    

停用效果

要停用供应商扩展程序,请创建图片拍摄用例或预览用例的新实例。

其他资源

要详细了解 CameraX,请参阅下面列出的其他资源。

Codelab

  • CameraX 使用入门
  • 向应用中添加 CameraView 片段
  • 代码示例

  • 官方 CameraX 示例应用