Android Camera1手动设置对焦和测光区

很久没写文章了,也是因为这段时间工作上没有遇到一些值得记录的内容。最近有客户提出需求需要我们的SDK提供手动调整对焦和测光区的接口。到今天基本实现了用户的需求,现在记录一下其中的一些难点。SDK代码有点老,基本功能都是基于Camera1实现的,所以以下内容也是针对Camera1。

Camera1上调整对焦和测光有系统现成的API。具体过程如下:

  1. 先获取CameraParameters对象;
  2. 通过ParametersgetMaxNumFocusAreasgetMaxNumMeteringAreas获取到最大可设置的对焦区和测光区数目,如果是0,则不支持对焦/测光区设置。(一般手机前置摄像头只支持测光区设置,后置摄像头可支持对焦和测光区设置);
  3. 设置Parameters的对焦区和测光区(setFocusAreas setMeteringAreas)。

这些调用系统API的步骤并不难,难点在于如何计算对焦区域/测光区域,即如何将用户在界面上的触摸点坐标转化成能直接被Camera利用的区域,特别是横竖屏切换、画面镜像翻转的场景下。

首先我们要了解摄像头硬件的图像传感器默认方向是左横屏,而我们正常的手机使用方向是竖屏的。


image.png

同时要了解Camera.Area的坐标系是这样的:

image.png

一句话概括下,就是需要将触摸点的坐标转化成Camera.Area坐标系(左横屏)下的坐标。

如果空间想象能力优秀,在脑海天马行空一番大概就搞定;否则,拿出纸笔比划一下,也能搞定。

如果画面镜像,比如是前置摄像头自拍的场景,需要对最终计算出来的X坐标也做镜像处理。

你可能感兴趣的:(Android Camera1手动设置对焦和测光区)