javascript - Windows 8 网络摄像头分辨率

标签 javascript windows-8 windows-runtime webcam resolution

我正在使用 JavaScript 开发 Windows 8 Metro 应用程序;然而,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]);
}

最佳答案

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

使用 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/

关于javascript - Windows 8 网络摄像头分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452705/

相关文章:

javascript - iframe 中的 Open.window

c# - 等待之后同步LockException

windows-8 - 是否可以将 Microsoft Kinect SDK 与 Metro Style 应用程序一起使用?

c# - 如何将 xbf 文件添加到 visual studio 项目

c# - 使用任务构造函数时无法使用结果启动任务

javascript - extjs 4.2.1 - 工具栏并将点击事件委托(delegate)给按钮

javascript - ./src/App.js 第 6 行 :19: 'Component' is not defined no-undef

javascript - 对选定的文本应用预格式tinymce

delphi - 使用 Delphi 开发 native Metro 应用程序的资源

c# - 尝试引用用户控件时出现错误 "The name does not exist in the current context"