ArgumentException:使用 Windows.Media.Devices.FocusControl 时,值未落在预期范围内

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

我想使用 Windows.Media.Devices.FocusControl 手动控制 HoloLens 2 上的焦点值。但是当运行到函数“FocusControl.Configure(FocusSettings)”或“FocusControl.SetValueAsync(UInt32)”时,它附带这个错误。 这是官方文档:text

我确信输入了确切支持的值和模式,因为它们可以使用给定的属性来返回。 在 Hololens 2 上,最小值为 170,最大值为 10000。无论我设置什么值,它总是会出现此错误。这是代码。

if (focusControl.Supported)
{
   await focusControl.LockAsync();
            
   Debug.Log("hhhhhfinsihed");

   //await focusControl.SetValueAsync((uint)focusControl.Min);
   await focusControl.SetValueAsync(focusvalue);
            
   Debug.Log("ohhhhhhhhhhh");
}

当我使用 FocusControl.Configure(FocusSettings) 时,它也会出现同样的错误。 这是完整的代码。

async private void CaptureImageByMediaCapture()
    {
        MediaCapture mediaCapture = new MediaCapture();
        var settings = new MediaCaptureInitializationSettings
        {
            SharingMode = MediaCaptureSharingMode.SharedReadOnly
        };

        await mediaCapture.InitializeAsync(settings);

        var focusControl = mediaCapture.VideoDeviceController.FocusControl;

        var foucussettings = new FocusSettings { Mode = FocusMode.Manual };
        focusControl.Configure(foucussettings);

        Debug.Log(focusControl.Supported);
        if (focusControl.Supported)
        {
            Debug.Log(focusControl.Min);
            Debug.Log(focusControl.Max);
            Debug.Log(focusControl.Step);
            Debug.Log(focusControl.Mode);
            Debug.Log(focusControl.Preset);
            Debug.Log(focusControl.Value);

            await focusControl.LockAsync();
            
            Debug.Log("hhhhhfinsihed");
            await focusControl.SetValueAsync(focusvalue);
            
            Debug.Log("ohhhhhhhhhhh");
            }
            
        }
        else
        {
            ...
        }
..........

在不使用 FocusControl 的情况下,代码可以在 Hololens 2 上正确拍摄照片。

c# windows uwp hololens
1个回答
0
投票

我还没有尝试过这个答案,但以下代码行可能有问题:

var settings = new MediaCaptureInitializationSettings
{
    SharingMode = MediaCaptureSharingMode.SharedReadOnly
};

此枚举在 Microsoft 文档中具有以下定义:

田野

独占控制0
MediaCapture 应独占控制 SourceGroup 中指定的一个或多个帧源。

共享只读1
MediaCapture 可以从 SourceGroup 中指定的帧源获取帧,但无法调整帧源的配置。

也许你应该尝试一下

ExclusiceControl

var settings = new MediaCaptureInitializationSettings
{
    SharingMode = MediaCaptureSharingMode.ExclusiveControl
};

此外,您可能需要检查是否支持手动对焦:

if (focusControl.SupportedFocusModes.Contains(FocusMode.Manual))
{
    // Manual focus is supported
}

此外,您可以尝试使用以下方法检查支持的焦点范围:

focusControl.SupportedFocusRanges;
© www.soinside.com 2019 - 2024. All rights reserved.