Jetpack CameraX 入门

Jetpack系列教程(一):CameraX的实战开发——让相机开发从“地狱“到“天堂“ 本文介绍了Google推出的CameraX库,它极大简化了Android相机开发流程。CameraX通过抽象层解决了传统Camera2 API的复杂性和兼容性问题,支持98%的Android设备(API 21+)。文章详细展示了CameraX的三步开发流程:添加依赖、配置布局和初始化相机,并提供了拍照、切换摄像头和图像分析等进阶功能实现代码。重点强调了CameraX自动生命周期管理的优势,解决了传统开发中的资源管理难题,同时提醒开发者注意权限申请和图像代理资源释放等关键细节。CameraX使相机开发从数百行 阅读详情

Jetpack CameraX

简介

CameraX是Jetpack支持库,旨在帮助您更轻松地开发相机应用程序。它提供了一致且易于使用的API表面,适用于大多数Android设备,向后兼容Android 5.0(API级别21)

它使用了Camera2的功能,但它使用了一种更简单,基于用例的方法,可以感知生命周期

CameraX 结构

开发人员使用CameraX通过一个称为用例的抽象与设备的摄像机进行交互。目前可用的用例如下:

  • 预览:准备一个预览SurfaceTexture

  • 图像分析:提供CPU可访问的缓冲区用于分析,例如用于机器学习

  • 图像捕获:捕获并保存照片

    用例可以同时组合和激活。例如,应用程序可以让用户使用预览用例查看相机看到的图像,有一个图像分析用例来确定照片中的人是否在微笑,包括一个图像捕获用例,如果他们在笑,去拍照

    权限
    权限声明
    <uses-permission android:name="android.permission.CAMERA"/>
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //可选
    
    动态申请
    
    
    要求

    CameraX 具有以下最低版本要求:

    • Android API 级别 21
    • Android 架构组件 1.1.1

    对于具有生命周期感知能力的 Activity,请使用 FragmentActivity 或 AppCompatActivity。

    声明依赖项
Getting Started with CameraX
1. 新建Android项目
2. 添加project的build.gradle依赖
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }

3.添加app的build.gradle依赖

android{
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } 
}

dependencies {
  // CameraX core library using the camera2 implementation
  def camerax_version = "1.0.0-beta08"
  // The following line is optional, as the core library is included indirectly by camera-camera2
  implementation "androidx.camera:camera-core:${camerax_version}"
  implementation "androidx.camera:camera-camera2:${camerax_version}"
  // If you want to additionally use the CameraX Lifecycle library
  implementation "androidx.camera:camera-lifecycle:${camerax_version}"
  // If you want to additionally use the CameraX View class
  implementation "androidx.camera:camera-view:1.0.0-alpha15"
  // If you want to additionally use the CameraX Extensions library
  implementation "androidx.camera:camera-extensions:1.0.0-alpha15"
}
配置
关于分辨率

CameraX 会自动提供专用于您的应用运行所在设备的功能.如果您未指定分辨率或指定的分辨率不受支持,CameraX 会自动确定要使用的最佳分辨率。所有这些操作均由库进行处理,无需您编写设备专属代码。

CameraX 的目标是成功初始化相机会话。这意味着 CameraX 会根据设备功能降低分辨率和宽高比。降低的原因可能是:

  • 设备不支持请求的分辨率。
  • 设备存在兼容性问题,例如需要特定分辨率才能正常运行的旧设备。
  • 在某些设备上,特定格式仅适用于特定宽高比。
  • 对于 JPEG 或视频编码,设备首选“最近的 mod16”。如需了解详情,请参阅 SCALER_STREAM_CONFIGURATION_MAP。

尽管 CameraX 会创建并管理会话,但您应始终检查代码中用例输出上返回的图像大小,并进行相应调整。

相机分辨率

您可以选择允许 CameraX 根据设备功能、设备支持的硬件级别、用例和所提供的宽高比组合设置图片分辨率。或者,您也可以在支持相应配置的用例中设置特定目标分辨率或特定宽高比

自动分辨率

CameraX 可以根据 cameraProcessProvider.bindToLifecycle() 中指定的用例自动确定最佳分辨率设置。请尽可能在单个 bindToLifecycle() 调用的单个会话中指定需要同时运行的所有用例。

CameraX 会考虑设备支持的硬件级别以及设备专属变化(设备可能会超出或不满足可用的信息流配置),根据绑定的一组用例确定分辨率。这样做的目的是使应用可在各种设备上运行,同时最大限度地减少设备专属代码路径。

图片拍摄和图片分析用例的默认宽高比为 4:3。

用例具有一个可配置的宽高比,可允许应用根据界面设计指定所需的宽高比。如果没有任何支持的完全匹配分辨率,则选择满足大多数条件的分辨率。因此,应用决定了相机应如何在应用中显示,CameraX 则会确定最佳相机分辨率设置,以在不同设备上满足这一要求。

应用可以执行以下任一操作:

  • 为用例指定 4:3 或 16:9 的目标分辨率

  • 指定自定义分辨率,CameraX 将尝试查找与其最接近的匹配项

  • 为 ImageCapture 指定剪裁宽高比

指定分辨率

使用 setTargetResolution(Size resolution) 方法构建用例时,您可以设置特定分辨率,如以下代码示例所示:

ImageAnalysis imageAnalysis =
      new ImageAnalysis.Builder()
        .setTargetResolution(new Size(1280, 720))
        .build();

如果没有可用分辨率,则回退到 640x480

CameraX 会根据请求应用最合适的分辨率。如果主要需求是满足宽高比要求,则仅指定 setTargetAspectRatio,CameraX 会根据设备确定合适的特定分辨率。如果应用的主要需求是指定分辨率以提高图片处理效率(例如根据设备处理能力处理较小或中等大小的图片),请使用 setTargetResolution(Size resolution)

旋转方向

默认情况下,在用例创建期间,相机旋转方向默认设置为与默认的显示屏旋转方向保持一致。

在这种默认情况下,CameraX 会生成输出以允许应用轻松与您希望在预览中看到的画面保持一致。可以通过配置用例对象时传入当前显示屏方向或在创建用例对象之后动态传入显示屏方向,

将旋转方向更改为自定义值以支持多显示屏设备。

实现预览

PreviewView,这是一种可以剪裁、缩放和旋转以确保正确显示的 View。

当相机处于活动状态时,图片预览会流式传输到 PreviewView 中的 Surface

使用 PreviewView

如需使用 PreviewView 实现 CameraX 预览,请按以下步骤操作(稍后将对这些步骤进行说明):

  1. 配置 CameraXConfig.Provider。
  2. 将 PreviewView 添加到布局。
  3. 请求 CameraProvider。
  4. 在创建 View 时,请检查 CameraProvider。
  5. 选择相机并绑定生命周期和用例。

使用 PreviewView 时,您无法执行以下任何操作:

  • 创建 SurfaceTexture,以在 TextureView 和 PreviewSurfaceProvider 上进行设置。
  • 从 TextureView 检索 SurfaceTexture,并在 PreviewSurfaceProvider 上对其进行设置。
  • 从 SurfaceView 获取 Surface,并在 PreviewSurfaceProvider 上对其进行设置。

如果出现上述任何一种情况,则 Preview 会停止将帧流式传输到 PreviewView

配置 CameraXConfig.Provider
    import androidx.camera.camera2.Camera2Config;
    import androidx.camera.core.CameraXConfig;

    public class MyCameraXApplication extends Application implements CameraXConfig.Provider {
        @NonNull
        @Override
        public CameraXConfig getCameraXConfig() {
            return Camera2Config.defaultConfig();
        }
    }
    
将 PreviewView 添加到布局
    <FrameLayout
        android:id="@+id/container">
            <androidx.camera.view.PreviewView
                android:id="@+id/preview_view" />
    </FrameLayout>
    
请求 CameraProvider
 public class MainActivity extends AppCompatActivity {
        private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            cameraProviderFuture = ProcessCameraProvider.getInstance(this);
        }
    }
    
检查 CameraProvider 可用性

请求 CameraProvider 后,请验证它能否在视图创建后成功初始化。以下代码展示了如何执行此操作:

    cameraProviderFuture.addListener(() -> {
        try {
            ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
            bindPreview(cameraProvider);
        } catch (ExecutionException | InterruptedException e) {
            // No errors need to be handled for this Future.
            // This should never be reached.
        }
    }, ContextCompat.getMainExecutor(this));
    
选择相机并绑定生命周期和用例

创建并确认 CameraProvider 后,请执行以下操作:

  1. 创建 Preview。
  2. 指定所需的相机 LensFacing 选项。
  3. 将所选相机和任意用例绑定到生命周期。
  4. 将 Preview 连接到 PreviewView。

以下代码展示了一个示例:

    void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {
              Preview preview = new Preview.Builder().build();
        CameraSelector cameraSelector = new CameraSelector.Builder().
                requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
        Camera camera = cameraProvider.bindToLifecycle(this,cameraSelector,preview);
        preview.setSurfaceProvider(previewView.createSurfaceProvider());
    }
    

如此即可实现预览

分析图像

这里的执行器可以理解为线程

图像分析用例为您的应用提供了可供 CPU 访问以执行图像处理、计算机视觉或机器学习推断的图像。该应用会实现对每个帧运行的 analyze 方法

通过传递一个执行器(这个执行器运行图像分析)和一个ImageAnalysis.Analyzer参数到setAnalyzer()方法来处理图像。

阻塞模式

图像分析可以分为两种模式:阻塞模式和非阻塞模式,通过调用方法setBackpressureStrategy()

设置不同参数来达到不同的模式,参数如下:

STRATEGY_BLOCK_PRODUCER
阻塞模式
在此模式下,执行程序会按顺序从相机接收帧;这意味着,如果 analyze() 方法所用的时间超过单帧在当前帧速率下的延迟时间,帧便可能不再是最新的帧,因为新帧已被阻塞进入管道,直到方法返回为止
STRATEGY_KEEP_ONLY_LATEST
非阻塞模式
在此模式下,执行程序在调用 analyze() 方法时会从相机接收最后一个可用帧。如果analyze方法所用的时间超过单帧在当前帧速率下的延迟时间,一些帧可能会跳过,以便在下一次 analyze() 接收数据时,它会获取相机管道中的最后一个可用帧。

在 analyze() 方法返回前,请通过调用 image.close() 关闭图片引用,以避免阻塞后续图像的生成(导致预览停顿)并避免可能出现的图像丢失。此方法必须完成分析或创建副本,而不是将图像引用传递到分析方法以外

 ImageAnalysis imageAnalysis =
        new ImageAnalysis.Builder()
            .setTargetResolution(new Size(1280, 720))
            .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
            .build();

    imageAnalysis.setAnalyzer(executor, new ImageAnalysis.Analyzer() {
        @Override
        public void analyze(@NonNull ImageProxy image) {
            int rotationDegrees = image.getImageInfo().getRotationDegrees();
                // insert your code here.
            }
        });

    cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, imageAnalysis, preview);

CameraX 会生成 YUV_420_888 格式的图片

图片拍摄

图片拍摄用例旨在拍摄高分辨率的优质照片,不仅提供简单的相机手动控制功能,还提供自动白平衡、自动曝光和自动对焦 (3A) 功能。调用程序负责决定如何使用拍摄的照片,具体包括以下选项:

  • [takePicture(Executor, OnImageCapturedCallback)](https://developer.android.google.cn/reference/androidx/camera/core/ImageCapture#takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback)):此方法为拍摄的图片提供内存缓冲区。
  • [takePicture(OutputFileOptions, Executor, OnImageSavedCallback)](https://developer.android.google.cn/reference/androidx/camera/core/ImageCapture#takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback)):此方法将拍摄的图片保存到提供的文件位置。

运行 ImageCapture 的可自定义执行程序有两种类型:回调执行程序和 IO 执行程序。

    ImageCapture imageCapture =
        new ImageCapture.Builder()
            .setTargetRotation(view.getDisplay().getRotation())
            .build();

    cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview);
    

配置好相机后,以下代码会根据用户操作拍照:

public void onClick() {
       imgPath = Environment.getExternalStorageDirectory()+"/APicture";
        File file = new File(imgPath);
        if (!file.exists()){
            file.mkdirs();
        }
        File imgFile = new File(imgPath,"temp.jpg");
         ImageCapture.OutputFileOptions outputFileOptions =
                new ImageCapture.OutputFileOptions.Builder(imgFile).build();
        capture.takePicture(outputFileOptions,
                ContextCompat.getMainExecutor(this), new ImageCapture.OnImageSavedCallback() {
                    @Override
                    public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
                        Log.d("SAVE SUCCESS =",Thread.currentThread().getName());
                     Log.d("SAVE SUCCESS",outputFileResults.toString());
                    }
                    @Override
                    public void onError(@NonNull ImageCaptureException exception) {
                        Log.d("SAVE error",exception.toString());
                    }
        });
    }

图片拍摄方法完全支持 JPEG 格式

供应商扩展
CameraX 用例旋转
疑难问题:

1.java.lang.IllegalStateException: Must call CameraX.initialize() first

原因:CameraX未初始化,为null

解决:ProcessCameraProvider必须放在Preview 、ImageCapture、ImageAnalysis用例之前

    ProcessCameraProvider.getInstance(this);
    //Preview
    //ImageAnalysis 初始化
    //ImageCapture
    ...   

2.在CameraX 1.0.0-beta08 下发现Application不配置CameraXConfig.Provider 也可以使用

原因:在ProcessCameraProvider.getInstance(this)下的CameraX的getOrCreateInstance方法中

   CameraXConfig.Provider configProvider = getConfigProvider(context);

在getConfigProvider中,

 if (application instanceof CameraXConfig.Provider) {
            // Application is a CameraXConfig.Provider, use this directly
            configProvider = (CameraXConfig.Provider) application;
        } else {
            // Try to retrieve the CameraXConfig.Provider through the application's resources
            try {
                Resources resources = context.getApplicationContext().getResources();
                String defaultProviderClassName =
                        resources.getString(
                                R.string.androidx_camera_default_config_provider);
                Class<?> providerClass =
                        Class.forName(defaultProviderClassName);
                configProvider = (CameraXConfig.Provider) providerClass
                        .getDeclaredConstructor()
                        .newInstance();
            }...

如果application不是CameraXConfig.Provider的子类,则会反射构造一个

Camera2Config.DefaultProvider实例,如下:

    /** @hide */
    @RestrictTo(RestrictTo.Scope.LIBRARY)
    public static final class DefaultProvider implements CameraXConfig.Provider {

        @NonNull
        @Override
        public CameraXConfig getCameraXConfig() {
            return defaultConfig();
        }
    }

其实,Google 也想到了这点,有兴趣的可以看一下 ProcessCameraProvider.getInstance()的注释

Simple Demo:CameraXSampleJava

为什么推荐使用Jetpack CameraX? isBack;// 绑定前确保解除了所有绑定,防止CameraProvider重复绑定到Lifecycle发生异常。 阅读详情

相关推荐

Jetpack 二维码扫描:CameraX与ML Kit结合方案

本文旨在为Android开发者提供一套完整的二维码扫描解决方案,结合Google推荐的Jetpack组件CameraX和ML Kit,实现高性能、低功耗的二维码识别功能。我们将覆盖从基础概念到高级优化的全部内容。文章首先介绍相关技术背景,然后深入分析CameraX和ML Kit的核心原理,接着提供详细的代码实现和优化策略,最后讨论实际应用场景和未来发展方向。CameraX: Jetpack中的相机库,简化了相机功能的开发ML Kit: Google提供的移动端机器学习SDK二维码。

移动开发前沿的博客 1925

摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)

1)本文讲述了几种控制 Camera 系统的输出图像尺寸-分辨率的方法,包含 windowing、Cropping、Skip、Subsample、Scale、Binning 几种方法。2)不同的 sensor 、不同的 Camera 系统支持的控制输出尺寸的方法不同。不同的方法对图像的视场角、帧率、图像质量等的影响也不同。大家应该结合具体 sensor 的特性、产品需求使用合适的方法。

物联网老王的博客,公众号同名 4126

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载)

本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。

weixin_29210727的博客 445

Jetpack Camera App 使用教程

Jetpack Camera App 使用教程 项目介绍 Jetpack Camera App(JCA)是一个专注于为应用开发者提供功能的相机应用,完全使用CameraX Kotlin和Jetpack Compose构建。它遵循Android设计和开发的最佳实践,旨在为开发者提供一个有用的参考。 项目快速启动 环境准备 确保你安装了Android Studio Jellyfish或更新版本。 克...

gitblog_00222的博客 1177

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

AutoDock Vina 对接计算(大批量)

AutoDock Vina是一种用于计算生物分子之间相互作用的计算工具,主要用于蛋白质和小分子(通常是潜在药物分子)之间的对接研究。它可以用于虚拟筛选、药物设计和生物分子结合位点的预测等多个应用领域。

MurphyStar的博客 1万+

Jetpack Camera App 开源项目安装与使用指南

Jetpack Camera App 开源项目安装与使用指南 1. 项目目录结构及介绍 Jetpack Camera App 是一个专为应用开发者打造的相机应用示例,它完全基于CameraX、Kotlin以及Jetpack Compose构建。本节将简要介绍其主要的目录结构。 主要目录概览 android: 包含了具体的Android应用代码。 app: 应用主模块,包含UI与逻辑。 ben...

gitblog_00481的博客 1119

MPC-CBF 控制原理详解

假设系统满足如下离散时间动力学模型xt1fxtutxt∈Xut∈Uxt1​fxt​ut​xt​∈Xut​∈Uxtx_txt​:状态变量,定义域为可行状态集X⊆RnX⊆Rnutu_tut​:控制输入,定义域为控制约束集U⊆RmU⊆Rm系统需满足安全约束,由如下控制障碍函数(CBF)hX→RhX→RCx∈X∣hx≥0C:=x∈X∣hx≥。

m0_54691290的博客 1179

CameraX系统二:配置选项

配置选项 您可以配置每个 CameraX 用例,以控制用例操作的不同方面。 例如,对于图片拍摄用例,您可以设置目标宽高比和闪光灯模式。以下代码显示了一个示例: KotlinJava ImageCapture imageCapture = new ImageCapture.Builder() .setFlashMode(...) .setTargetAspectRatio(...) .build(); 除配置选项之外,一些用例会公开 A...

qq_33209777的博客 4976

基于ESP32-P4的低成本旋转式激光雷达系统设计

激光雷达(LiDAR)作为机器人环境感知的核心传感器,其本质是融合光学测距、机电控制与实时数据处理的嵌入式系统。理解时间飞行(ToF)原理与机械旋转耦合机制,是实现高精度点云采集的基础;而系统级误差源——如计时抖动、电机惯性、信号串扰和温漂——直接决定实际建图鲁棒性。在资源受限场景下,选用RISC-V双核MCU(如ESP32-P4)可兼顾实时控制与网络服务能力,通过硬件时间戳捕获、S型加减速轨迹规划、旋转变压器供电及双Bank OTA等工程手段,有效平衡分辨率、帧率与稳定性。本文围绕360°旋转式激光雷达的

weixin_36231030的博客 433

2024年电气工程师最新面试题及答案

1. **基本电气工程原理**:包括电流、电压、电阻、功率等基本概念。2. **欧姆定律**:V = IR,描述电压、电流和电阻之间的关系。42. **风力发电系统组成**:包括风力涡轮机、发电机、控制系统等。44. **智能电网技术**:包括自动化控制、通信技术、数据分析等。10. **减少EMI**:使用屏蔽、滤波、合理布线等方法。40. **光伏系统组成**:包括光伏板、逆变器、控制器等。48. **能量存储技术**:包括电池、超级电容器、飞轮等。

guo162308的博客 6563

CameraX ImageAnalysis 输出帧大小设置

CameraX 是对 Jetpack 的补充,可让您更轻松地利用 Camera2 API 的功能 //设置宽高比 ImageAnalysis.Builder().setTargetAspectRatio //设置实际的尺寸 ImageAnalysis.Builder().setTargetResolution Camera2 录像并获取实时帧

分享Android应用和系统开发、音视频编码、性能优化相关知识 9090

NOC总线架构拓扑介绍

在开篇里,我们对芯片PPA有了初步的认识。下面,让我们从访存这个简单的问题开始展开介绍芯片基础概念。CPU是怎样访问内存的?简单的答案是,CPU执行一条访存指令,把读写请求发往内存管理单元。内存管理单元进行虚实转换,把命令发往总线。总线把命令传递给内存控制器,内存控制器再次翻译地址,对相应内存颗粒进行存取。之后,读取的数据或者写入确认按照原路返回。再复杂些,当中插入多级缓存,在每一层缓存都未命中的情况下,访问才会最终达到内存颗粒。

元直的博客 5293

Jetpack支持库CameraX使用入门——相机预览

概览 CameraX是一个Jetpack支持库,用来帮助开发者简化相机应用的开发和适配工作,它将一系列旧的Camera和新的Camera2的相机API进行统一适配,将两套设计迥异的相机API进行适配设计,并且作为androidX并作为Jetpack的一部分再发布,用来简化开发者开发相机功能时的大量重复适配的工作。最低可以适配到API Level 21。 由于加入到了Jetpack组件当中,它也增加了一部分功能用来绑定到LifecycleOwner等API来适配到生命周期接口的能力,使得开发者无需再重复编写生

時を越える笑顔 1905

FT2004(D2000)开发实战之网口stmmac报错调试(Failed to reset the dma)

网口stmmac报错调试(Failed to reset the dma)

嵌入式Linux 3584

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android JetPack组件-CameraX初探

CameraX 又是一个 Google 推出的 JetPack 组件 ,是一个新鲜玩意儿,故给大家分享下我在项目中的使用过程心得。。 CameraX 是什么? Google 开发者文档 对 CameraX 的评价如下: CameraX是一个Jetpack支持库,旨在帮助您简化相机应用程序的开发工作。它提供一致且易于使用的API接口,适用于大多数Android设备,可以向后兼容至Android 5....

努力努力再努力O的博客 4351

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android Jetpack之CameraX的使用

Andoird中拍照、录像是很常见的功能,但是系统相机的Api目前发生了很大的变化,有Camera1、Camera2、CameraX三个api,每个api的使用和方法都不一样,如果做过相机开发的小伙伴应该会很头疼这三个api在不同安卓系统手机的适配,由于目前的App有一部分工作涉及到这部分,所以总结了一下,目前由基础到深入慢慢总结. 一.简介:(官方介绍如下) CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。它提供一致且易用的 API 接口,适用于大多数 Android

u012556114的博客 3540

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在 Jetpack Compose 中解锁 CameraX 的强大功能

作者 / Google 开发者关系工程师Jolanda Verhoef本文是 "相机与媒体 Spotlight Week" 系列的内容之一。此系列中,我们会提供文章、视频、示例代码等资源,以帮助您提升应用中的媒体体验。我们了解到您喜欢 CameraX 和 Jetpack Compose 库提供的强大功能,但希望使用更符合语言习惯的 Compose API 来构建相机界面。今年,我们的工程团队开发...

Android开发者 1516

Jetpack - CameraX

CameraX 解决了由于碎片化问题在不同机型上保持一致性体验的麻烦, 只需要关心 API 调用,不需要对不同机型做适配。CameraX 把不同的功能,如 预览、拍照等功能封装成不同的 UseCase,这样就可以根据业务的需要,来绑定不同的 UseCase 来实现具体的功能。不同设备的摄像头支持的宽高比可能不同,使用 RATIO_DEFAULT 可以自动选择最适合当前设备的宽高比。:保持宽高比,可能会在顶部或左侧留出空白。:保持宽高比,可能会在上下或左右留出空白。:保持宽高比,可能会在底部或右侧留出空白。

HugMua的博客 672

Google Jetpack 新组件 CameraX 介绍与实践

近期,Google 的 Jetpack 组件又出了新的库:CameraX 。 顾名思义:CameraX 就是用来进行 Camera 开发的官方库了,而且后续会有 Google 进行维护和升级。这对于广大 Camera 开发工程师和即将成为 Camera 的程序员来说,真是个好消息~~~ 原文地址:glumes.com/post/androi… CameraX 介绍 官方有给出一个示例的工程,我...

weixin_33910759的博客 1048

Jetpack支持库 CameraX 初体验

CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。

唐诺 3545

在 Jetpack Compose 中使用 CameraX示例

在使用Jetpack Compose开发安卓应用,当在学习使用CameraX组件时发现官方提供的教程不是Compose的。与是我就记录一下,简单的示例。

lxyoucan的博客 851

Android Jetpack之CameraX使用

参考: https://developer.android.google.cn/training/camerax https://codelabs.developers.google.com/codelabs/camerax-getting-started/#0 添加Gradle依赖 // Use the most recent version of CameraX, currently that...

hongxue8888的博客 2548

Android JetPack组件CameraX使用及修改显示图像

学更好的别人,做更好的自己。——《微卡智享》本文长度为3743字,预计阅读9分钟前言好久没用Kotlin写Android的代码了,刚开始写起来还有点生,不过适应了一阵也算是恢复过来了。今...

Vaccae的博客 2001

JetPack之使用CameraX完成拍照和拍视频

前段时间CameraX的Beta版发布了,这几天有时间也来尝试一下。Beta版本是对外测试版本,意味着它已经走出实验室走向生产,API的调用基本稳定不会大改了,bug也会更少可以用于生成环境。 之前使用Camera1和Camera2开发相机功能的时候需要调用非常复杂的API,而且由于Android手机的碎片化严重,不同手机对相机功能的支持度也不一样,因此很多做相机相关应用的公司都会封装自己的相机库来简化相机的使用步骤和处理兼容性问题。 CameraX其实就是Google开发的一个用来简化相机开发时候API的

mingyunxiaohai的专栏 3475
上一篇: 软件开发模式(ISO认证 )
下一篇: Kotlin的入门(一)
K_Hello
博客等级 码龄12年 33粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值