java - Android CameraX 拍照前如何确保对焦?(应该是一个很常用的功能!)
问题描述
我正在使用 CameraX 并想拍照。当然,没有人想要一张模糊的照片,所以我们在拍照前要确保对焦。
第一次尝试:像官方示例takePicture
中所做的那样简单地调用。
问题:我可以改变场景并快速按下拍照按钮。然后,当 takePicture 发生时,相机还没有完成自动对焦。因此,我得到一张模糊的照片:/
第二次尝试:在实际拍照前,先触发对焦,等待对焦完成。
代码如:
camera!!.cameraControl.startFocusAndMetering(
FocusMeteringAction.Builder(
autoFocusPoint,
FocusMeteringAction.FLAG_AF
).apply {
//focus only when the user tap the preview
disableAutoCancel()
}.build()
)
问题:集中注意力需要很长时间(几秒钟!)。用户绝对不能接受。
因此,我想知道我该怎么办?恕我直言,这应该是非常常用的,所以我很惊讶地发现我找不到任何解决方案!我错过了什么吗?
感谢您的任何建议!
解决方案
我找到了答案!只需调用setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
.
原因:看ImageCapture的构造函数:
if (mCaptureMode == CAPTURE_MODE_MAXIMIZE_QUALITY) {
mEnableCheck3AConverged = true; // check 3A convergence in MAX_QUALITY mode
} else {
mEnableCheck3AConverged = false; // skip 3A convergence in MIN_LATENCY mode
}
而那个领域:
/**
* A flag to check 3A converged or not.
*
* <p>In order to speed up the taking picture process, trigger AF / AE should be skipped when
* the flag is disabled. Set it to be enabled in the maximum quality mode and disabled in the
* minimum latency mode.
*/
private final boolean mEnableCheck3AConverged;
啊哈!
推荐阅读
- javascript - 如何使用我们从 jquery 获得的数据,然后在带有 for 循环的 var 中使用它?
- reactjs - 从包含多封电子邮件的字符串中提取电子邮件?
- python - 接收特定消息时如何使用 SkPy 发送特定消息
- unix - 有没有办法在单管道命令链中以有效的方式组合以下两个 UNIX 命令?
- c# - 如何正确配置 ASP.NET 标识以便维护两个数据库上下文?
- git - Git 拉取、合并和推送特定更改而不带来不相关的提交?
- spring - 带有 Hibernate 5.4 的 WebLogic 12c (12.2.1.4)
- android - 有没有办法解决ValueEventListner错误android Firebase?
- gdb - 如何交互式调试 MIPS
- javascript - 使用三个 BufferGeometry 绘制自定义形状 - 形状取决于角度