Windows 8网络摄像头分辨率

时间:2012-09-17 03:07:45

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

我正在使用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]);
}

1 个答案:

答案 0 :(得分:0)

我对你要做的事情有点不清楚。您想要捕获特定照片分辨率的问题,还是您希望以特定宽高比捕获的问题?

使用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设备初始化的分辨率。 / p>

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

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

http://writeablebitmapex.codeplex.com/