网站不换域名换空间/如何开一个自己的网站

网站不换域名换空间,如何开一个自己的网站,如何做收款网站,英德市建设及城乡管理局网站目录 📂 前言 1. 🔱 Camera2 2. 🔱 CameraX 3. 🔱 Camera2 与 CameraX 1)使用复杂度与开发效率 2)控制能力与应用场景 3)设备兼容性与稳定性 4)更新与维护 4. &#x1f4a0…

目录

📂 前言

1. 🔱 Camera2

2. 🔱 CameraX

3. 🔱 Camera2 与 CameraX

1)使用复杂度与开发效率

2)控制能力与应用场景

3)设备兼容性与稳定性

4)更新与维护

4. 💠 代码示例

1)Camera2 使用示例

2)CameraX 使用示例

5. ✅ 小结


        在 Android 开发领域,相机功能的实现一直是众多应用的核心竞争力之一。Camera2 和 CameraX 作为 Android 中两个重要的相机 API,它们在不同的场景下为开发者提供了强大的支持。本文将对比剖析这两个 API,从架构设计、使用场景、性能优化等多个维度进行探讨。

📂 前言

        Android 有三套关于摄像头的 API,分别是 Camera、Camera2 和 CameraX,其中 Camera 已废弃,在Android 5.0(API level 21)以后推荐使用 Camera2 和 CameraX。

        Camera2 引入是用来替换 Camera 的,它拥有丰富的 API 可以为复杂的用例提供深入的控制功能,但它使用起来也相对麻烦。

        CameraX 是在 Camera2 基础上构建的更高层次的库,旨在简化相机操作,提供更方便的 API,降低学习曲线。

1. 🔱 Camera2

        Camera2 对相机的底层控制要求很高,需要自定义功能、处理原始图像数据等。它遵循 Client-Server 架构,通过 Binder 通讯与 CameraService 和 Camera Hal 进行交互,这种架构使得 Camera2 能够实现对相机硬件的精细化操作,满足复杂自定义相机的需求。

        在实际开发中,使用 Camera2 需要处理较多的底层细节和设备兼容性问题。例如,配置一个简单的预览页面可能需要编写大量代码,包括创建容器、打开摄像头、搭建应用层与相机内核的桥梁、建立会话等步骤。这种复杂性在一定程度上增加了开发难度,但也为开发者提供了更广阔的操作空间。

        Camera2 的强大之处在于它允许开发者自定义相机参数,如 ISO、快门速度等。这对于需要精细控制相机硬件的复杂场景来说,无疑是至关重要的。例如,在专业摄影应用中,开发者可以通过 Camera2 实现对曝光、对焦等参数的精确控制,从而拍摄出高质量的照片。

        然而,Camera2 的使用也并非没有挑战。由于其底层操作的复杂性,开发者需要对相机硬件有深入的了解,并且需要处理不同设备的兼容性问题。这要求开发团队具备较高的技术水平和丰富的经验。

Androidhttps://developer.android.com/media/camera/camera2?hl=zh-cn

2. 🔱 CameraX

        CameraX 是 Android Jetpack 中的一个相机库,基于 Camera2 构建,为开发者提供了更高层次的抽象和简化的 API。它支持 Android 5.0 及以上版本,能够自动处理大量设备兼容性问题。CameraX 引入了 Use Case 组件,如预览(Preview)、图片拍摄(ImageCapture)、图像分析(ImageAnalysis)和视频拍摄(VideoCapture)等,开发者可以根据需要选择相应的 Use Case 进行配置,更轻松地实现基本的相机功能,大大简化了开发流程,降低开发难度。

  • 预览:使用 PreviewView,它是一种支持裁剪、缩放和旋转的 view,相机处于活动状态时,图片预览会流式传输到它的 surface。

  • 图片拍摄:提供自动白平衡、曝光、延迟、闪光灯和对焦等功能,支持把图片放到内存缓存区和写文件。

  • 图像分析:应用会对每个帧运行 analyze() 方法,可以进行图像处理、视觉或机器学习。

  • 视频拍摄:录制视频流和音频流,对其压缩合并后写入磁盘。

 

        CameraX 的核心特性之一是其生命周期感知能力。它与 Lifecycle 组件结合,开发者无需手动管理相机的生命周期。例如,在 Activity 或 Fragment 的后台切换时,CameraX 会自动停止或恢复预览,这种自动化的生命周期管理不仅减少了开发工作量,还提高了应用的稳定性和可靠性。

        此外,CameraX 在多版本兼容方面表现出色。它基于 Camera2 API 封装,兼容 Camera1,开发者无需为不同版本的 Android 系统编写额外的代码。这种兼容性使得 CameraX 能够广泛应用于各种设备,确保应用在不同设备上的良好运行。

        在实际应用中,CameraX 的使用非常便捷。例如,配置预览功能只需几十行代码即可完成。开发者可以快速搭建一个功能完善的相机应用,而无需深入理解底层的相机操作。这种高效性使得 CameraX 成为大多数开发者首选的相机开发工具。

CameraX 概览  |  Android media  |  Android Developerhttps://developer.android.google.cn/media/camera/camerax?hl=zh-cn

3. 🔱 Camera2 与 CameraX

特性

Camera2

CameraX

使用复杂度

控制能力

设备兼容性

生命周期管理

手动

自动

更新频率

学习曲线

陡峭

平缓

1)使用复杂度与开发效率

        Camera2 的使用复杂度较高,配置一个简单的预览页面需要编写大量代码,并且需要处理底层细节和设备兼容性问题。这种复杂性在一定程度上增加了开发周期和维护成本。相比之下,CameraX 对功能进行了详细划分,使用更加便捷,配置也更简单。例如,在 CameraX 中配置预览功能,只需几十行代码即可完成,大大提高了开发效率。

2)控制能力与应用场景

        Camera2 提供了更深入的相机控制能力,适合需要精细控制相机硬件的复杂场景。开发者可以自定义相机参数,如 ISO、快门速度等,这对于专业摄影应用来说至关重要。然而,这种精细化控制也要求开发者具备较高的技术水平和丰富的经验。CameraX 在方便开发的同时,对相机的精细化控制能力相对较弱。但它能够满足大多数常见的相机功能需求,如预览、拍照、视频录制等。

3)设备兼容性与稳定性

        CameraX 由专门团队维护,能够自动处理大量设备兼容性问题,减少了开发者在这方面的负担。它支持 Android 5.0 及以上版本,覆盖了广泛的设备范围。而使用 Camera2 时,开发者需要自己处理不同设备的兼容性问题,这增加了开发的难度和工作量。CameraX 的这种兼容性优势使得它在实际开发中更受欢迎,能够确保应用在各种设备上的稳定运行。

4)更新与维护

        CameraX 处于持续开发和更新中,平均一个月发布一个版本,开发者可以通过升级库来解决遇到的问题。这种持续更新的特性使得 CameraX 能够不断优化和改进,适应不断变化的开发需求。而 Camera2 作为系统级别的 API,更新相对较少,开发者在遇到边界问题时可能需要等待系统更新或自行解决。

4. 💠 代码示例

1)Camera2 使用示例

// 打开相机
cameraManager.openCamera(cameraId, object : CameraDevice.StateCallback() {override fun onOpened(camera: CameraDevice) {// 相机打开成功}override fun onDisconnected(camera: CameraDevice) {// 相机断开连接}override fun onError(camera: CameraDevice, error: Int) {// 相机出错}
}, null)// 配置预览
val surface = Surface(textureView.surfaceTexture)
val captureRequest = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
captureRequest.addTarget(surface)// 创建会话
cameraDevice.createCaptureSession(listOf(surface), object : CameraCaptureSession.StateCallback() {override fun onConfigured(session: CameraCaptureSession) {// 会话配置完成}override fun onConfigureFailed(session: CameraCaptureSession) {// 会话配置失败}
}, null)

2)CameraX 使用示例

// 配置预览
val preview = Preview.Builder().build()
preview.setSurfaceProvider(textureView.surfaceProvider)// 配置图像拍摄
val imageCapture = ImageCapture.Builder().build()// 配置视频拍摄
val videoCapture = VideoCapture.Builder().build()// 绑定Use Case
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({val cameraProvider = cameraProviderFuture.get()val camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture, videoCapture)
}, ContextCompat.getMainExecutor(context))

5. ✅ 小结

        Camera2 和 CameraX 在 Android 相机开发中各有千秋。Camera2 适合需要精细控制相机硬件的复杂场景,但使用复杂度较高,需要处理较多的底层细节和设备兼容性问题。CameraX 则提供了更简洁的 API 和自动处理设备兼容性的能力,适合大多数开发者快速开发相机应用。

        随着 Android 系统的不断演进和开发技术的不断提升,CameraX 凭借其高效性、兼容性和易用性,逐渐成为主流的相机开发工具。然而,Camera2 在特定的专业领域仍然具有不可替代的地位。开发者在选择使用哪个 API 时,应根据项目的具体需求和开发团队的技术能力进行权衡。

        未来,随着人工智能和机器学习技术的不断发展,CameraX 与这些技术的结合将为开发者提供更多可能性。例如,通过 CameraX 的图像分析功能,结合机器学习模型,可以实现更智能的图像处理和分析,如实时图像识别、文字识别、条形码识别等。这将为 Android 相机应用的开发带来新的机遇和挑战,推动相机功能的不断创新和发展。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证

背景: vllm推理框架启动模型不具备api-key验证。需借助fastapi可以实现该功能 代码实现: rom fastapi import FastAPI, Header, HTTPException, Request,Response import httpx import logging# 创建 FastAPI 应用 app FastAPI() logging.basicConfig(…

基于SpringBoot的名著阅读网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Gitee上库常用git命令

Gitee上库常用git命令 1、Fork 项目2、个人仓库修改3、追加提交4、创建PR5、多笔commit合一 1、Fork 项目 2、个人仓库修改 git add . // -s 表示自动添加邮箱签名信息,-m表示其后跟随commit描述 git commit -sm “add transition freeze” git push origin [目标…

Java 大视界 -- Java 大数据在智慧农业精准灌溉与施肥决策中的应用(144)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Redux,React-redux。基础

状态管理库,集中式存储状态,管理状态 ✅ redux //简单实现 redux源码 export function createStore(reducer) {// reducer由用户编写, 必须是一个函数,dispatch的时候,reducer要执行if (typeof reducer ! function) t…

5.2 位运算专题:LeetCode 268. 丢失的数字

1. 题目链接 LeetCode 268. 丢失的数字 2. 题目描述 给定一个包含 [0, n] 范围内 n 个不同整数的数组 nums(实际长度为 n),找出数组中缺失的那个数字。 示例: 输入:nums [3,0,1] → 输出:2(…

【Android】VehiclePropertyAccess引起CarService崩溃

VehiclePropertyAccess引起CarService崩溃 VehiclePropertyAccess VehiclePropertyAccess属性,用于定义车辆属性的访问权限。权限包括 读:READ,只可以读取,不能写入。 VehiclePropertyAccess:READ写:WRITE&#xf…

SpringCloud配置中心:Config Server与配置刷新机制

文章目录 引言一、Config Server基础架构1.1 Server端配置1.2 配置文件命名规则 二、Config Client配置2.1 Client端配置2.2 配置注入与使用 三、配置刷新机制3.1 手动刷新配置3.2 使用Spring Cloud Bus实现自动刷新3.3 配置仓库Webhook自动触发刷新 四、高级配置管理策略4.1 配…

PyTorch生成式人工智能实战:从零打造创意引擎

PyTorch生成式人工智能实战:从零打造创意引擎 0. 前言1. 生成式人工智能1.1 生成式人工智能简介1.2 生成式人工智能技术 2. Python 与 PyTorch2.1 Python 编程语言2.2 PyTorch 深度学习库 3. 生成对抗网络3.1 生成对抗网络概述3.2 生成对抗网络应用 4. Transformer4…

【计算机网络】-计算机网络期末复习题复习资料

一、计算机网络体系结构(800字) 1. OSI参考模型 七层结构:物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能: 物理层:比特流传输(如RJ45、光纤接口) 数据链路层&…

31天Python入门——第9天:再学函数

你好,我是安然无虞。 文章目录 再学函数1. 变量在函数中的作用域2. 函数的参数传递.补充学习: 不定长参数*args和**kwargs 3. 值传递和引用传递补充学习: 把函数作为参数传递 4. 匿名函数5. python中内置的常用函数zip()map()filter()all()any() 6. 函数练习 再学函…

EasyUI数据表格中嵌入下拉框

效果 代码 $(function () {// 标记当前正在编辑的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …

【C语言】多进程/多线程

【C语言】多进程/多线程 参考链接多进程/多线程服务器1. 多进程服务器2. 多线程服务器 结语参考链接 参考链接 c 中文网 菜鸟 c 多进程/多线程服务器 多进程和多线程是常用的并发编程技术。它们都允许程序同时执行多个任务,提高了系统的资源利用率和程序的运行效率…

mysql 磐维(opengauss)tidb误删数据之高级恢复

Mysql参考: Mysql 8.0 XtraBackupMysqlbinlog 完全恢复 - 墨天轮 Mysql 8.0 XtraBackupMysqlbinlog 完全恢复[TOC]# 一、安装mysql 8.0.19## 1.1https://www.modb.pro/db/509223MySQL 的全量备份、增量备份与 Binlog 时间点恢复_mysqlbinlog自动备份吗-CSDN博客文章…

3. 轴指令(omron 机器自动化控制器)——>MC_SetPosition

机器自动化控制器——第三章 轴指令 11 MC_SetPosition变量▶输入变量▶输出变量▶输入输出变量 功能说明▶时序图▶重启动运动指令▶多重启运动指令▶异常 MC_SetPosition 将轴的指令当前位置和反馈当前位置变更为任意值。 指令名称FB/FUN图形表现ST表现MC_SetPosition当前位…

MySQL面试专题

1.什么是BufferPool? Buffer Pool基本概念 Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制…

调用百度api实现语音识别(python)

该代码实现了一个企业级的语音识别解决方案,通过调用百度语音识别API,实现实时录音识别和对已有音频语音识别功能。 百度智能云:请自行访问百度智能云,开通免费的语音识别功能,获取API_KEY和SECRET_KEY。操作按照百度流程即可,可免费申请。 首先,配置下百度API和描述下错…

KRaft模式

目录标题 Kraft模式**1. 什么是Kraft模式?****2. 为什么引入Kraft模式?****3. 核心优势****4. 架构与工作原理****5. 部署与配置要点****6. 适用场景与最佳实践****总结**KIP-833: Mark KRaft as Production Ready除了Kraft模式,Kafka还有以下…

常见框架漏洞之一:Thinkphp5x

ThinkPHP是为了简化企业级应⽤开发和敏捷WEB应⽤开发⽽诞⽣的,是⼀个快速、兼容⽽且简单的轻量级国产PHP开发框架,诞⽣于2006年初,原名FCS,2007年元旦正式更名为 ThinkPHP,遵循Apache2开源协议发布,从Stru…

2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)

龙卷风优化算法(Tornado optimizer with Coriolis force)是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:11.7)的2025年智能优化算法 01.引言 当自然界的狂暴之力,化身数字世界的智慧引擎&…