2012-09-17 116 views
2

我正在使用JavaScript for Windows 8 Metro App开发;然而,C#不是不可能的。我试图找到一种方法来指定我的网络摄像头可以支持照片捕捉的最高分辨率。到目前为止,我一直在使用MediaCapture类,所以我可以预览并仍然捕获图像。我注意到CaptureUI支持MaxPhotoResolution的选项。但是,我希望这是自动的,不需要用户交互。我正在用尽想法。这适用于自助服务终端应用程序,因此我可以完全控制设备,因此我们欢迎解决方法。任何想法或建议?Windows 8摄像头分辨率

为了测试,我使用了LifeCam Studio。相机应用程序提取1920×1080,而我的应用程序捕获640×480的照片。此外,驱动程序随附的软件完美无瑕!这是不是我的控制?

更新

我一直在寻找到设置特定的相机设置;弹出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]); 
} 

回答

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

一种策略是在ApplicationData.Current.TemporaryFolder创建一个临时文件,并调用MediaCapture.CapturePhotoToStreamAsync上的临时文件。然后在自己的用户界面中显示该文件以允许剪切,并最终在将最终图像保存到实际目标文件夹之前将其调整为所需的分辨率。

尽管您必须创建自己的用户界面以允许用户选择想要保留的图像区域,但CodePlex上的WriteableBitmapEx项目可能会在实际裁剪和调整大小时证明是非常有用的:

http://writeablebitmapex.codeplex.com/

+0

请允许我澄清问题是令人沮丧和未解决的。虽然没有运行时错误引发使用链接到社会MSDN谈话。它返回可能的格式列表。但是,使用setMediaStreamPropertiesAsync不具有任何作用。有任何想法吗?相机应用程序使用最大设置!我的应用程序没有。 :( – PlagueEditor