Qt 6.8 如何强制QML Camera重新对焦

问题描述 投票:0回答:1

我正在将 Android Qt 5.7 应用程序移植到 Qt 6.8。 该应用程序使用 QML 相机模块来拍摄一些照片,并且还使用覆盖几乎所有视口的“隐形按钮”来强制相机重新对焦。

在 Qt 5.7 中实现此目的的相关代码是:

    // Tap-Focus operation
    CameraInvisibleButton {
        id: focusTapArea
        anchors.top: parent.top
        anchors.left: parent.left
        width: parent.width
        height: parent.height - 2*captureButton.height
        visible: camera.cameraStatus == Camera.ActiveStatus && camera.focus.isFocusModeSupported(Camera.FocusAuto)
        opacity: 0

        onClicked: {
            console.info("focusTap clicked. Camera lockStatus:", camera.lockStatus)
            if (camera.lockStatus == Camera.Searching)
                return;
            camera.unlock();
            camera.searchAndLock();
        }
    }

上述代码片段的相关函数(camera.unlock() / lock() / searchAndLock())现已过时。 Qt-6 的文档提到:

在支持它的硬件上,QCamera 允许您调整焦点和变焦。这还包括?诸如用于特写工作的“宏”模式(例如读取条形码或识别字母)或“触摸聚焦”等功能 - 指示硬件尝试聚焦的图像中有趣的区域。 https://doc.qt.io/qt-6/qml-qtmultimedia-camera.html#focusPoint-prop

...但是没有例子说明如何实现“触摸对焦”操作。 你有什么想法吗?

PS:我对聚焦于特定的点击点不感兴趣,我只是想强制相机重新聚焦到其默认焦点。

android camera qml focus qt6
1个回答
0
投票

通过反复试验,我们发现需要一个

toggleFocus()
函数。在某些平台上,
unlock()
会触发重新聚焦;对其他人来说,
searchAndLock()
确实如此。我们训练用户执行某个操作(例如点击并按住)来调用此函数,并在失败时重复。

function toggleFocus() {
    if (camera.lockStatus !== Camera.Unlocked) {
        camera.unlock();
    else {
        camera.searchAndLock();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.