首页 > 解决方案 > 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

标签: javaandroidkotlinandroid-camera2android-camerax

解决方案


SurfaceOrientedMeteringPointFactory由于从 UI 坐标到标准化传感器矩形坐标的转换可能不正确,因此相机无法准确获取点击区域的焦点。转换还应考虑诸如PreviewView布局方向、比例类型、设备的旋转以及相机是否正面/背面等因素。SurfaceOrientedMeteringPointFactory不这样做。如果您对转换的样子感到好奇,请查看PreviewViewMeteringPointFactory.

PreviewView已经提供了一个在内部处理转换的计量点工厂,您可以调用PreviewView.getMeteringPointFactory()它并将其传递给水龙头坐标。


推荐阅读