【问题标题】:Windows 8 Webcam ResolutionWindows 8 网络摄像头分辨率
【发布时间】:2012-09-17 03:07:44
【问题描述】:

我正在使用 JavaScript 进行 Windows 8 Metro App 开发;但是,C# 并非不可能。我正在尝试找到一种方法来指定我的网络摄像头可以支持照片拍摄的最高分辨率。到目前为止,我一直在使用MediaCapture 类,这样我就可以预览并捕捉图像。我注意到 CaptureUI 支持MaxPhotoResolution 的选项。但是,我希望这是自动的,不需要用户交互。我的想法不多了。这是针对信息亭应用程序的,因此欢迎使用变通方法,因为我可以完全控制设备。有什么想法或建议吗?

为了进行测试,我使用的是 LifeCam Studio。相机应用程序拍摄 1920x1080,而我的应用程序拍摄 640x480 的照片。此外,驱动程序附带的软件可以完美运行!这是我无法控制的吗?

更新

我一直在研究特定的相机设置; this 弹出;但是,到目前为止,我还没有运气......

9 月 18 日更新

我一直在挖掘并想出了this。返回分辨率属性;但是,setMediaStreamPropertiesAsync 方法无效!我的想法不多了。

12 月 13 日更新

我决定最后一次尝试,并使用 18 日描述的一些方法,它通过 JavaScript 和 Lifecam Studio 在官方 Windows 8 版本上运行。至于为什么,我不知道。这是我使用的代码:

//media=MediaCapture object
function setBestResolution(media) {
    //Gets collection of objects each describing the resolution, etc.
    var resolutions = media.videoDeviceController.getAvailableMediaStreamProperties(Windows.Media.Capture.MediaStreamType.photo);
    var numResolutions=resolutions.length;

    for (var r = 0; r<resolutions;r++){
        var res = resolutions[r];
        //.width and .height are props. Debug to see all.
    }

    //I chose 40 as best option; however, programmatically you can choose any. I have dedicated kiosk app and same webcam and therefore don't need to.
    media.videoDeviceController.setMediaStreamPropertiesAsync(Windows.Media.Capture.MediaStreamType.photo, resolutions[40]);
}

【问题讨论】:

    标签: javascript windows-8 windows-runtime webcam resolution


    【解决方案1】:

    我有点不清楚你想做什么。您想捕捉特定的照片分辨率还是想以特定的纵横比捕捉问题?

    使用 CameraCaptureUI 时,您可以使用 PhotoSettings 属性来设置拍摄照片的条件:

    http://msdn.microsoft.com/en-us/library/windows/apps/windows.media.capture.cameracaptureui.photosettings.aspx

    例如,您可以设置 CroppedAspectRatio 以确保图像始终为 4:3 或 16:9。您还可以设置 MaxResolution 属性来限制拍摄照片时的像素尺寸。

    MediaCapture 类仅在您希望将自定义捕获体验作为应用程序的一部分而不是使用系统对话框时才需要。 MediCapture 的默认初始化以最高分辨率初始化设备(我相信,虽然我没有测试过)。可以覆盖您希望 MediaCapture 捕获的分辨率,但您仅限于设备支持的分辨率。您可以列举设备支持的分辨率,您链接到的论坛帖子显示了如何:

    http://social.msdn.microsoft.com/Forums/en-SG/winappswithcsharp/thread/751b8d83-e646-4ce9-b019-f3c8599e18e0

    当然,您的设备支持的分辨率可能不是您真正想要保持的分辨率或纵横比。因此,您最终可能不得不向用户展示裁剪照片的能力,并且最终可能不得不进一步调整图像大小。这将需要您需要构建的额外代码和额外的 UI 部分。如果您有代码允许用户裁剪,并且如果您有代码将图像大小(或下采样)调整为您想要的确切分辨率,那么实际上不需要更改 MediaCapture 设备初始化的分辨率。

    一种策略是在 ApplicationData.Current.TemporaryFolder 中创建一个临时文件,然后对该临时文件调用 MediaCapture.CapturePhotoToStreamAsync。然后在您自己的 UI 中显示该文件以允许裁剪并最终将其调整为您想要的分辨率,然后将最终图像保存到真正的目标文件夹。

    虽然您必须创建自己的 UI 以允许用户选择他们想要保留的图像区域,但 CodePlex 上的 WriteableBitmapEx 项目可能会证明对实际裁剪和调整大小非常有帮助:

    http://writeablebitmapex.codeplex.com/

    【讨论】:

    • 请允许我澄清一下,因为这个问题令人沮丧且尚未解决。虽然使用社交 MSDN 谈话的链接不会引发运行时错误。它返回可能格式的列表。但是,使用 setMediaStreamPropertiesAsync 没有任何效果。有任何想法吗?相机应用程序使用最大设置!我的应用程序没有。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    相关资源
    最近更新 更多