Android Camera2 API 如何设置缩小变焦切换至超广角镜头
你设置CONTROL_ZOOM_RATIO为0.5f无响应的核心原因是你当前打开的主广角相机的CONTROL_ZOOM_RATIO_RANGE仅支持[1.0, 10.0]区间,小于1的参数会被相机框架直接忽略,2.0f为放大变焦是符合参数预期的正常表现。
实现超广角效果的正确逻辑
Android平台多镜头设备的每个物理镜头对应独立的Camera ID,你要切换超广角视野不能通过主广角镜头缩小变焦实现,必须先找到超广角镜头对应的Camera ID并打开使用,步骤如下:
- 枚举设备所有可用的Camera ID,逐个查询
CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS参数,焦距数值越小的镜头视野越广,找到数值远小于主广角的ID即为超广角镜头。 - 打开超广角镜头后,其默认的1.0倍变焦就是原生超广角视野,无需额外设置小于1的变焦比。
SCALER_CROP_REGION参数计算规则
如果你需要在单个镜头下通过SCALER_CROP_REGION实现数字变焦,计算逻辑为:
- 先获取当前镜头的
SENSOR_INFO_ACTIVE_ARRAY_SIZE,你当前查询到的主广角参数为Rect(0, 0, 4000, 3000),这是该镜头可输出的最大sensor区域。 - 变焦比zoom≥1时,裁剪区域的宽高分别为:
cropWidth = activeArray.width() / zoom cropHeight = activeArray.height() / zoom - 裁剪区域需要居中,左上角坐标计算方式:
left = (activeArray.width() - cropWidth) / 2 top = (activeArray.height() - cropHeight) / 2 - 最终给
SCALER_CROP_REGION传入Rect(left, top, left + cropWidth, top + cropHeight)即可,效果和同数值的CONTROL_ZOOM_RATIO一致。
效果参考
- 广角效果:

- 超广角效果:

内容的提问来源于stack exchange,提问作者sdkgbsd
相关产品推荐
相关产品推荐

