我想使用 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 上正确拍摄照片。
我还没有尝试过这个答案,但以下代码行可能有问题:
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;