CameraX1.1有哪些新的特性发布?Android开发者

如果您更喜欢通过视频了解此内容,请在此处查看:

CameraX是一个为了简化编写相机应用而设计的支持库,它所提供的高级API可以让开发者专注于和用户交互而非相机的内部实现。我们一直在探索并修复其背后复杂的兼容性问题,让每个新版本都得以在更多的设备上稳定运行。

何时使用CameraX或Camera2,这取决于您期望更快的开发速度或是想要更高的自定义程度。

CameraX基于主要的使用场景来构建,比如实时预览相机、检索缓冲区以进行分析和拍摄照片,在CameraX1.1版本中还加入了视频拍摄功能。我们来看一个简单的CameraX示例:

funbindPreview(cameraProvider:ProcessCameraProvider){//使用CameraX创建Preview用例varpreview:Preview=Preview.Builder().build()//创建cameraSelector,它会在设备上搜索所需的相机varcameraSelector:CameraSelector=CameraSelector.Builder()//在本例中,我们选择搜索后置相机.requireLensFacing(CameraSelector.LENS_FACING_BACK).build()//从CameraX的CameraView包中获取previewView的句柄//利用此方法可以轻松的将相机内容添加到视图上preview.setSurfaceProvider(previewView.getSurfaceProvider())//将preview与其生命周期绑定varcamera=cameraProvider.bindToLifecycle(thisasLifecycleOwner,cameraSelector,preview)}△CameraX代码示例

CameraX是生命周期感知型组件,这意味着它将自动处理应用的生命周期事件来实现开始、停止、暂停和恢复。现在,应用启动时屏幕上便会显示实时预览。

我们已于2021年5月发布了1.0稳定版本,目前正在开发1.1Alpha版本并且很快将会进入Beta阶段。并且我们一如既往地不断为新增设备推出兼容性修复程序,例如1.0.1和1.0.2。

在CameraX1.1版本中我们新增了开发者呼声很高的功能,具体而言,在本文中我们将重点介绍:

在CameraX1.1版本中我们加入了视频拍摄功能,视频拍摄API(尚处于Alpha阶段,细节可能会发生变化,但整体结构基本会保持不变)提供了录制到文件等基本功能、可自动适配每台设备的QualitySettingAPI,以及LifecycleManagementAPI。接下来我们先来了解如何设定视频拍摄功能,代码示例如下:

另一个呼声很高的功能是YUV到RGB的转换,我们来了解一下此功能。

△YUV格式(图左)转换至RGB格式(图右)

相机通常以YUV420格式生成数据,其中包括明亮度(Luminance,Y)、色度(Chroma,U,V)和一些填充字节以将各行与有效的内存步幅对齐。但是这种格式的图像处理起来可能很麻烦,而现在CameraX可以将ImageAnalysis的输出转换为大家更熟悉的RGBA以方便处理。接下来我们看一个示例:

valimageAnalysis=ImageAnalysis.Builder().setTargetResolution(Size(1280,720)).setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888).setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build()△从ImageAnalysis获取RGB输出

在示例代码中,我们创建了ImageAnalysis实例,为图像缓冲区指定了所需的分辨率和背压策略,并调用新的setOutputImageFormat方法以请求RGBA8888格式的输出。现在,ImageAnalysis输出的帧为RGBA8888数据而不再是YUV格式。

CameraX中YUV到RGB的转换基于libyuv。此外,在CameraX1.1版本中数据本身可以转换到目标分辨率。在中端设备上对图像大小为640x480至1080p的数据进行转换大约需要5~10毫秒,具体性能因设备而异。此外APK会略微增加50KB左右。

修复单像素漂移

YUV转换还修复了部分设备上存在的单像素漂移问题。在这些设备上,YUV输出经过桶形移位一个像素,导致最右边的一列数据出现在图像的左边缘。在已知会发生这种情况的设备上,进行YUV到RGB的转换及输出YUV或RGB都会被修复,并且CameraX将会持续对更多有需要的设备进行修复。

△修复单像素漂移

相机特效

在CameraX1.1中的CameraXExtensionsAPI可以更为充分地发挥设备强大的功能。

CameraXExtensions包括一些最常见的内置相机特效:

我们来看看如何使用CameraXExtensionsAPI:

//获取后置相机列表valcameraSelector=CameraSelector.DEFAULT_BACK_CAMERA//检查所有的后置相机中是否有支持焦外虚化if(extensionsManager.isExtensionAvailable(cameraProvider,cameraSelector,ExtensionMode.BOKEH)){//创建扩展cameraSelector,我们提供了相机并指定焦外虚化模式//它将开始在后台搜索支持焦外虚化的后置相机valbokehCameraSelector=extensionsManager.getExtensionCameraSelector(cameraProvider,cameraSelector,ExtensionMode.BOKEH)//创建imageCapture和previewvalimageCapture=ImageCapture.Builder().builder()valpreview=Preview.Builder().build()//使用bokehCameraSelector将它们绑定到生命周期cameraProvider.bindToLifecycle(lifecycleOwner,bokehCameraSelector,imageCapture,preview)}△以BOKEH效果捕捉并预览图像

在上面的例子中,imageCapture输出的图像将会具有焦外虚化效果,如果设备支持的话,preview也将预览焦外虚化效果。

曝光补偿

CarmeraX1.1中还添加了曝光补偿API,此功能可以帮助用户更好地捕捉过度曝光或者曝光不足的区域。

如图所示我们所处的场景窗外很明亮而室内很昏暗,此时则可以调整曝光补偿来更好地捕捉明亮的室外或昏暗的室内场景。我们来看一个例子:

//创建变量来跟踪exposureIndex值varexposureIndex=0//使用cameraSelector将imageCapture和preview绑定到生命周期valcamera=cameraProvider.bindToLifecycle(lifecycleOwner,getCameraSelector(),preview,imageCapture)//为视图中的按钮添加点击事件evButton.setOnclickListener{//检查有效的范围以防止可能的异常valrange=camera.cameraInfo.exposureState.exposureCompensationRangeif(range.contains(exposureIndex+1)){//调用camera.cameraControl的setExposureCompenstation()方法来设置曝光补偿camera.cameraControl.setExposureCompenstation(++exposureIndex)//使用exposureCompensationStep来实现从index到EV到转换valev=camera.cameraInfo.exposureState.exposureCompensationStep.toFloat()*exposureIndexLog.i("CameraXLog","EV:$ev")}}△通过按钮调整曝光

其中exposureIndex是一个与设备无关的数字,它将以硬件允许的最小步长递增或递减曝光值,因此可以在不同的设备上以类似的方式运作。如果您想向用户展示EV值,可以获取exposureCompensationStep来实现转换。

平滑缩放

在CameraX1.1中,我们还增加了平滑缩放功能。有一些设备有包括广角和长焦在内的多个镜头,CameraX可以检测这些设备是否支持SMOOTH_ZOOM框架,在受支持的设备上使用CameraX的缩放控件时,会自动使用所有的相机来实现更大的缩放范围。如果您已经在使用这个缩放控件,那当您使用1.1版本进行编译时,您的应用应该就可以访问这些设备上的所有相机。

接下来介绍我们在1.1中添加的更多功能。

希望对CameraX1.1版本的简要介绍对大家有所帮助,非常期待看到大家使用CameraX构建的功能!

THE END
1.面试技术点之安卓篇A HandSome Man: 这个写法有问题啊,首次点击直接是fasle flutter 自定义组件-抽奖大转盘 lostcixin: luck_util这个类文件能否也发一下? 最新文章 Android中Gradle常用配置 面试技术点之kotlin篇 面试技术点之flutter篇 2024年20篇 2023年1篇 2022年7篇 2021年26篇 2020年21篇 2019年15篇 2018年29篇 2017年https://blog.csdn.net/NotesChapter/article/details/144350679
2.Android和iOS平台特性mob64ca12f5c08e的技术博客Android与iOS平台特性分析 在移动应用开发的世界中,Android和iOS是两个主流的平台,它们各自有着独特的特性和优势。了解这些特性对于开发者而言至关重要,可以帮助他们在不同平台上更好地实现应用功能。 1. 平台架构 Android Android是一个开放源代码的平台,运行在Java虚拟机(JVM)上。它的应用是基于Android SDK开发的,https://blog.51cto.com/u_16213454/11873550
3.笔记(24)安卓各版本特性简述腾讯云开发者社区4.4 特性 1.webview与js交换可以使用@JavascriptInterface注释接口方法,通过webveiw向js中注入对象调用该方法,修复4.4以下安全漏洞风险 5.0 新特性—2014年(Lollipop) 1.全新的Material Design设计风格 2.支持64位ART虚拟机。 1.放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译。Android内存https://cloud.tencent.com/developer/article/2368979
4.什么是鸿蒙系统?一文快速了解鸿蒙系统基础知识2.鸿蒙系统与Android有何不同? 鸿蒙系统(HarmonyOS),由华为公司开发,是一种面向智能终端的分布式操作系统。而Android是由Google公司开发的一种基于Linux内核的开源移动操作系统。 1. 设计理念不同 鸿蒙系统:鸿蒙系统的设计理念是构建一个统一的、无缝的分布式操作系统。它支持多种设备之间的协同工作,并提供一致的用户https://www.eefocus.com/e/1593577.html
5.usdt钱包软件有哪些?十大usdt钱包app汇总交易平台区块链imToken冷钱包 v2.14.1 Android & Ios最新版 类型:银行金融 大小:46.18MB 语言:简体中文 时间:2024-02-04 查看详情 imToken钱包优势 多链钱包,轻松使用 一套助记词管理多链钱包,告别繁复备份 多链各有差异,支付体验同样流畅 代币兑换,安全快速 私钥自持,无需信任第三方即可完成操作 https://www.jb51.net/blockchain/877588.html
6.诸神皇冠国际服下载亡人节有三种祈祷,祈祷受伤角色痊愈,祈祷已婚人士生孩子,祈祷延寿,祈祷延寿暂时无用,其他两种成功率看脸。 亡人节可以通过拜神治愈伤痕(后天负面特性消除,先天负面不能消除),延长寿命(表现为不会衰老,但还是会退休),提高怀孕几率(先天绝育无法提高 ),一样要求在自家城堡神庙内修建相关神像 玩家热评 玩家1: https://shouyou.3dmgame.com/android/140612.html
7.文档中心以下为一些常见的技术问题解答及常见概念的理解,本文档将持续补充,对推送有疑问的开发者可以自行 Ctrl+F 搜索关键字找寻解答 一、概况问题 1. 如何申请接入? 感谢您选择小米推送,点此查看接入指南; 2. 小米推送收费吗? 小米推送的基础服务目前是免费的。 3. 小米推送目前支持哪些平台? 目前仅支持Android平台。https://dev.mi.com/console/doc/detail?pId=1292
8.vivo开放平台每次Android系统的升级,几乎都会在交互体验上带来一些新变化,此次Android 11也不例外。 例如: 2.2.1 聊天气泡 聊天气泡(chat bubbles)的会话方式正式推出,不再是实验性功能,该特性支持会话窗口最小化为一个或多个悬浮气泡,气泡可以展开为小窗口模式的页面; https://dev.vivo.com.cn/wap/documentCenter/doc/428
9.OPPO开放平台本文档基于谷歌Android 11 Developer Preview 4(DP4)版本的变更输出,后续Beta版如有新的变更和特性,我们会刷新文档的相关章节内容,请开发者持续关注。 一、兼容性调试工具 Android 11 引入了新的工具,用于针对最新版平台中的行为变更来测试和调试应用。这些工具属于新的兼容性框架的一部分,可让应用开发者单独开启和关https://open.oppomobile.com/new/developmentDoc/info?id=10724
10.ifanr访谈:友盟,不只是数据服务平台爱范儿核心业务:数据服务平台 ifanr:友盟主要的业务是在数据这一块,外界所了解的友盟,也是一个数据服务平台。有什么运营数据可以分享吗? 蒋凡:我们平台里现在有 2 万多款应用,每天活跃用户(DAU)在 4000 万左右。全球(有一些国外用户)覆盖了 1.6 亿部设备,国内占了 9000 万– 1 亿。Android 平台 6000 台设备,iOS https://www.ifanr.com/76731/
11.15款能够替代Notion的优秀软件(都有免费版)有很多优秀的产品都可以代替 Notion 来做笔记和做项目管理,而且这些替代产品的价格比 Notion 更加实惠。 神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。 编者按:Notion 是一个公认的强大的笔记和项目管理平台,但功能的强大来自于极其复杂的定制,并不是所有人都https://36kr.com/p/2291085667260169
12.OSCHINA开源的 Linux 游戏平台「GitHub 热点速览」 977阅 告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐 569阅 云计算专区 169.6万人关注 Coolbpf 最新特性系列解读:eNetSTL 网络功能加速库在龙蜥社区开源 359阅 揭秘Zadig 多环境配置最佳实践 - Helm Chart 篇 https://www.oschina.net/