camerax 自动聚焦_Camera中对焦模式总结

1,相机对焦模式有以下几种:

auto  //自动

infinity //无穷远

macro //微距

continuous-picture //持续对焦

fixed //固定焦距

2,常见对焦模式切换场景

2.1,单拍时,会先对焦再拍照,再切换到CAF;

有一个从 af 切换到 caf 过程

2.2,连拍时,会先对焦再拍照,连拍完成,再切换到 CAF;

同样一个从 af 切换到 caf 过程

2.3,触屏对焦,过一段时间(2s-3s)会自动切换到CAF; (对焦锁定2s-3s)

也是从af 切换到 caf 过程

这三个场景都涉及到从 af 切换到 caf 过程,这个切换过程有两个地方需要注意:

一是focus-mode 要切换过来,并且设置到底层

mParameters.setFocusMode("auto");

mParameters.setFocusMode("continuous-picture");

二是相应的回调也要切换过来,设置到底层

mActivity.getCameraDevices().autoFocus(mAutoFocusCallback);

mActivity.getCameraDevices().setAutoFocusCallBack(mAutoFocusMoveCallback);

这两个步骤缺一不可。

3,对焦画框逻辑

3.1, autoFocus 流程中会有三类图片,五种状态

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android Camera2 API自动对焦的坐标是从[-1000, 1000]的范围内进行定义的,其(0, 0)表示图像的心。 如果您需要将屏幕上的触摸坐标转换为适合于自动对焦的坐标,可以使用以下代码: ```java private MeteringRectangle[] getFocusAreaRect(float x, float y) { int areaSize = 200; int left = clamp((int) x - areaSize / 2, 0, mTextureView.getWidth() - areaSize); int top = clamp((int) y - areaSize / 2, 0, mTextureView.getHeight() - areaSize); RectF rectF = new RectF(left, top, left + areaSize, top + areaSize); return new MeteringRectangle[]{new MeteringRectangle(rectF, 1000)}; } private int clamp(int value, int min, int max) { return Math.max(min, Math.min(max, value)); } ``` 这个方法将返回一个MeteringRectangle数组,其包含一个矩形区域,该区域是在屏幕上给定的x和y坐标周围的一个固定大小。在这个例子,我们使用了一个200x200像素的矩形区域。您可以根据需要更改这个值。 接下来,您可以将这个MeteringRectangle数组传递给CameraCaptureSession的setRepeatingRequest方法,就可以开始自动对焦了。 ```java RectF rectF = new RectF(left, top, left + areaSize, top + areaSize); MeteringRectangle[] meteringRectangle = new MeteringRectangle[]{new MeteringRectangle(rectF, 1000)}; CameraCaptureRequest.Builder builder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START); builder.set(CaptureRequest.CONTROL_AE_REGIONS, meteringRectangle); builder.set(CaptureRequest.CONTROL_AF_REGIONS, meteringRectangle); cameraCaptureSession.setRepeatingRequest(builder.build(), null, backgroundHandler); ``` 这个代码片段将启动自动对焦。请注意,我们使用了CONTROL_AF_TRIGGER_START触发器来开始自动对焦。在对焦完成后,您可以使用相同的代码将触发器设置为CONTROL_AF_TRIGGER_CANCEL,以停止自动对焦。 希望这可以帮助您解决您的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值