java - cameraX 对焦不准确
问题描述
我正在创建一个自定义相机应用程序并尝试添加如下焦点功能
val factory = SurfaceOrientedMeteringPointFactory(
viewFinder.width.toFloat(),
viewFinder.height.toFloat()
)
val point = factory.createPoint(event.x, event.y)
try {
cameraControl?.cancelFocusAndMetering()
val action = FocusMeteringAction.Builder(point, FocusMeteringAction.FLAG_AF)
.setAutoCancelDuration(5, TimeUnit.SECONDS)
.build()
}
对焦不准确,正如您在白色圆圈下方看到的那样,我点击以使笔对焦并查看对焦的位置。
水龙头和焦点之间的距离非常大。我的默认相机应用程序并非如此。
如何将焦点调整到我点击的点PreviewView
解决方案
SurfaceOrientedMeteringPointFactory
由于从 UI 坐标到标准化传感器矩形坐标的转换可能不正确,因此相机无法准确获取点击区域的焦点。转换还应考虑诸如PreviewView
布局方向、比例类型、设备的旋转以及相机是否正面/背面等因素。SurfaceOrientedMeteringPointFactory
不这样做。如果您对转换的样子感到好奇,请查看PreviewViewMeteringPointFactory
.
PreviewView
已经提供了一个在内部处理转换的计量点工厂,您可以调用PreviewView.getMeteringPointFactory()
它并将其传递给水龙头坐标。
推荐阅读
- python - 从文件读取到 python 字典
- python - 在我的 django 网站上看不到我的博客文章
- tensorflow - 使用特征 normalizer_fn 和批量标准化是否相关?
- laravel - 未找到“播种机”类
- prestashop - 激活 Prestashop 主题时无法声明类 WishList
- node.js - 使用 CORS 时如何将 html、css 和 js 作为发布响应提供服务?
- reactjs - store.dispatch 原因( NotAllowedError )
- python - 如何在 Pytorch 中实现收缩自动编码器?
- cluster-analysis - 如何使用 SVM 进行无服务集群 scikit-learn
- ruby-on-rails - 如何获取以 .html 结尾的 URL(使用 rails 5)