通过曝光控制等级控制相机曝光

时间:2017-06-01 07:10:31

标签: c# .net camera uwp media

我在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;   
}

0 个答案:

没有答案