前言
近几年推出的手机里,具备超广角才能的越来越多了,但因为Android的碎片化问题,相机才能也是每个国产厂商要点关注的,适配问题是在所难免的了。最近笔者也是浅浅的研讨了一下怎么获取到手机的超广角摄像头,主要从原生支撑库适配和厂商适配两方面来研讨这个问题。先说结论,也没有总结出很好的适配计划,所以本文或许会有点水哈。
原生适配计划
笔者的主要方针是从原生api中获取到那颗支撑超广角的摄像头,也就是咱们在运用Camera2时常用的,在CameraManager
中获取到的cameraList
,并从它的特性中挑选出符合要求的摄像头。
这里引用一个比较简略在网上搜到的计划:
Android 尝试适配广角镜头的计划
这个计划的核心思想是经过获取摄像头的传感器物理宽高与对焦间隔,计算出它的视图角。视图角越大则证明摄像头的视角越大。那么最大视角的摄像头就被认为是超广角了。公式如下:
具体的理论知识点可参考:
Angle of view – Wikipedia
相似的做法也出现在Sumsung
的文档中:
三星Camera广角才能开放
不适配情况
笔者手上有一台HUAWEI P40
,一台realme Q2 Pro
。
-
运用P40进行测验,来自
HUAWEI
官网的摄像头参数及测验结果:
最终挑选出来的是
id = 0
的摄像头,但实际上超广角摄像头是截图中的id = 4
摄像头,显着不符。 -
运用
realme Q2 Pro
进行测验,发现在运用原生的Camera2 API获取到的cameraList
只包括两个摄像头,一个前置一个后置,后置的仅仅咱们平时运用的那颗默认后置摄像头。并且笔者在运用其他OPPO设备测验后发现都有相似问题。
因为笔者身边没有更多其他厂商的设备测验,所以暂时不能确认该计划的准确率有多高。并且在运用P40的id = 4
摄像头测验中发现,设备回来的预览帧并没有对广角摄像头的畸变做处理,与体系相机的作用有差异。
总结一下,运用原生API适配的话,本钱较高,厂商或许并没有对此做过多的兼容。
- 需求经过某些定理来确认广角/超广角摄像头。
- 即使能成功获取,也有或许是体系没有进行过多处理的产出,需求开发者做一些适配,比如画面的畸变问题。
厂商适配计划
既然原生API有限制,笔者就去搜索了各大厂商的开放渠道。
HUAWEI
这是HUAWEI
关于相机的开发者文档,HUAWEI
为开发者开放了一个名为CameraKit
的API。下载里边的demo即可体验作用。
相机才能 | 华为开发者联盟 (huawei.com)
能够经过这个名为CameraKitDemo_NormalMode-1.1.5
的工程进行调试
依据它的文档说明,经过缩放即可到达超广角的作用,作用与体系相机相似。
CameraKit
为咱们供给一个com.huawei.camera.camerakit.Mode
作为办理,能够经过其取得设备支撑的缩放范围以及设置缩放。
float[] zooms = mMode.getModeCharacteristics().getSupportedZoom();
mMode.setZoom(zooms[0]);
ps:这样获取到的预览帧畸变问题有所改善。
ps:研讨的时分发现马克相机
这款app在P40上居然支撑超广角摄影,笔者在简略查看它的apk后发现了它也有集成HUAWEI
的CameraKit
。
OPPO
OPPO
也为开发者供给了适配其设备的相机API,以及它对应的demo。
OPPO 开放渠道
oppo/CameraUnit
据官方文档供给的信息,该API只适配OPPO
旗舰系列以及ColorOS
。
但在笔者运用realme Q2 pro
测验后发现,API也适用。ps:realme运用的是其自家的realmeUI
。
在github的截图上显现,应该有一个0.6X
的倍数能够挑选,这样就能够与体系相机对应得上了。而在realme
上,则多了一个后置广角的摄像头挑选。这个不扫除是不同体系的适配问题。
需求留意的是,OPPO
的超广角功用是需求请求企业账号的。ps:这个也是笔者想吐槽的点。。。
总结
除了以上两大厂商外,笔者暂时没有找到国内主流的厂商有推出相似的Camera API。如果有懂的同学,能够谈论沟通一下。
相比于运用原生API,若深度开发一款相机使用,引入主流厂商的开放计划其实也算是一种开发过程中的权衡利弊。毕竟在现在国内Android厂商百花齐放的年代,仅仅运用Camera2
进行开发很或许会出现兼容性问题,更何况有些使用或许还在运用Camera1
。高版本的Android体系在摄影时发生一些奇奇怪怪的问题,笔者偶然也会遇到。所以挑选接入厂商的计划,或许也是一种不错的挑选。
最终
好了,又水了一篇文章哈哈哈。。。对本文来说干货不多,主要想记录一下笔者研讨怎么获取超广角的一些结果,如果您也有相似的需求或研讨方向希望能够对您有一些启示。或者说如果您有一些不一样的思路,也欢迎沟通。