我在uwp应用程序中有一个类,它使用USB摄像头的设备ID初始化MediaCapture对象,然后在加载我的应用程序主页面时调用该类,打开预览流。关于它的一切工作正常,但我试图通过MediaCapture.VideoDeviceController控制相机的曝光,根据MS Docs文章应该可以通过曝光控制类。但是,当我尝试实现它们在该文章中显示的滑块时,它表示它是not supported并抛出System.Runtime.InteropServices.COMException
。现在,我知道这款相机支持曝光控制,因为我可以在另一个应用程序中调整它。除此之外,我还可以看到"曝光"以上属性,它具有以下capabilities。那些最小值和最大值是我能够在其他应用程序中看到的值。那么,我如何使用曝光控制类调整曝光?有没有更好的方法呢?我的最终目标是使用相机拍摄图像并将其保存到文件中。
相机类:
class Camera:ICamera
{
public double exposure { get; set; }
public MediaCapture media;
public string deviceID;
public async Task InitializeCamera()
{
var videoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
media = new MediaCapture();
for (int i = 0; i < videoDevices.Count; i++)
{
var devInfo = videoDevices[i];
if (devInfo.Name !="UNICAM Front" && devInfo.Name != "UNICAM Rear")
{
deviceID = devInfo.Id;
break;
}
}
await media.InitializeAsync(new MediaCaptureInitializationSettings {VideoDeviceId = deviceID});
}
}
页面加载功能:
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
Camera camera = new Camera();
await camera.InitializeCamera();
MediaCapture _media;
_media = camera.media;
bool _isPreviewing;
DisplayRequest _displayRequest = new DisplayRequest();
_displayRequest.RequestActive();
DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape;
PreviewControl.Source = _media;
await _media.StartPreviewAsync();
_isPreviewing = true;
}