前言

近几年推出的手机里,具备超广角才能的越来越多了,但因为Android的碎片化问题相机才能也是每个国产厂商要点关注的,适配问题是在所难免的了。最近笔者也是浅浅的研讨了一下怎么获取到手机的超广角摄像头,主要从原生支撑库适配厂商适配两方面来研讨这个问题。先说结论,也没有总结出很好的适配计划,所以本文或许会有点水哈。

原生适配计划

笔者的主要方针是从原生api中获取到那颗支撑超广角的摄像头,也就是咱们在运用Camera2时常用的,在CameraManager中获取到的cameraList,并从它的特性中挑选出符合要求的摄像头。

这里引用一个比较简略在网上搜到的计划:

Android 尝试适配广角镜头的计划

这个计划的核心思想是经过获取摄像头的传感器物理宽高对焦间隔,计算出它的视图角视图角越大则证明摄像头的视角越大。那么最大视角的摄像头就被认为是超广角了。公式如下:

image.png

具体的理论知识点可参考:

Angle of view – Wikipedia

相似的做法也出现在Sumsung的文档中:

三星Camera广角才能开放

不适配情况

笔者手上有一台HUAWEI P40,一台realme Q2 Pro

  • 运用P40进行测验,来自HUAWEI官网的摄像头参数及测验结果:
    image.png

    Screenshot_20221112_190413.jpg

    最终挑选出来的是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的工程进行调试
image.png

依据它的文档说明,经过缩放即可到达超广角的作用,作用与体系相机相似。

CameraKit为咱们供给一个com.huawei.camera.camerakit.Mode作为办理,能够经过其取得设备支撑的缩放范围以及设置缩放。

image.png

float[] zooms = mMode.getModeCharacteristics().getSupportedZoom();
mMode.setZoom(zooms[0]);

ps:这样获取到的预览帧畸变问题有所改善

ps:研讨的时分发现马克相机这款app在P40上居然支撑超广角摄影,笔者在简略查看它的apk后发现了它也有集成HUAWEICameraKit

image.png

OPPO

OPPO也为开发者供给了适配其设备的相机API,以及它对应的demo。

OPPO 开放渠道

oppo/CameraUnit

据官方文档供给的信息,该API只适配OPPO旗舰系列以及ColorOS
image.png

但在笔者运用realme Q2 pro测验后发现,API也适用。ps:realme运用的是其自家的realmeUI

在github的截图上显现,应该有一个0.6X的倍数能够挑选,这样就能够与体系相机对应得上了。而在realme上,则多了一个后置广角的摄像头挑选。这个不扫除是不同体系的适配问题

Screenshot_2022-11-12-22-48-21-10_992541143ac31b36a26669908abcb6f3.jpg

需求留意的是,OPPO的超广角功用是需求请求企业账号的。ps:这个也是笔者想吐槽的点。。。

总结

除了以上两大厂商外,笔者暂时没有找到国内主流的厂商有推出相似的Camera API。如果有懂的同学,能够谈论沟通一下。

相比于运用原生API,若深度开发一款相机使用,引入主流厂商的开放计划其实也算是一种开发过程中的权衡利弊。毕竟在现在国内Android厂商百花齐放的年代,仅仅运用Camera2进行开发很或许会出现兼容性问题,更何况有些使用或许还在运用Camera1。高版本的Android体系在摄影时发生一些奇奇怪怪的问题,笔者偶然也会遇到。所以挑选接入厂商的计划,或许也是一种不错的挑选。

最终

好了,又水了一篇文章哈哈哈。。。对本文来说干货不多,主要想记录一下笔者研讨怎么获取超广角的一些结果,如果您也有相似的需求或研讨方向希望能够对您有一些启示。或者说如果您有一些不一样的思路,也欢迎沟通。