如何在Windows Phone 8.1中使用MediaCapture设置最大分辨率?

时间:2015-05-19 14:27:22

标签: c# windows-runtime windows-phone-8.1

我正在使用Windows Phone 8.1(RT)我使用MediaCapture拍摄照片(请记住,对预览照片不感兴趣)。 我使用了下面的代码,但是图片的质量很糟糕,只有在照片中看到了照亮光线的部分。

{
"contents": [
    {
        "type": "image", 
        "data": {
            "attachment": "picurl", 
            "width": 600, 
            "height": 398
        }
    }, 
    {
        "type": "text", 
        "data": "something like xxx"
    }
]

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

看起来您正在配置MediaCapture以为您提供“预览质量”照片。这样做:

await captureManager.InitializeAsync(new MediaCaptureInitializationSettings
{
    StreamingCaptureMode = StreamingCaptureMode.Video,
    PhotoCaptureSource = PhotoCaptureSource.Photo, // I believe your bug was here
    AudioDeviceId = string.Empty,
    VideoDeviceId = cameraID.Id
});

或者实际上,只需尝试大多数属性的默认值,并且只设置VideoDeviceId来选择相机。它应该有助于缩小问题范围。

至于设置更高的照片捕获分辨率,这样的事情可能会起作用:

private async Task SetPhotoResolution()
{
    var resolutions = _captureManager.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo).Select(x => x as VideoEncodingProperties);

    var maxRes = resolutions.OrderByDescending(x => x.Height * x.Width).FirstOrDefault();

    await _captureManager.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, maxRes);
}

请确保照片分辨率的宽高比与预览分辨率的宽高比相匹配,否则您可能会在某些手机的边缘附近出现一些条带。

另外,我测试此功能的手机仅返回VideoEncodingProperties来自GetAvailableMediaStreamProperties信道的MediaStreamType.Photo电话的NV12 var gstock = ["EPA:PIG","LON:AHT","NYSE:URI"]; $(document).ready(function () { for (var i = 0; i < gstock.length; i++) { $.getJSON("https://finance.google.com/finance/info?client=ig&q="+gstock[0]+"&callback=?", function (response) { var stockInfo1 = response[0]; var stockString1 = '<div class="stockWrapper">HAULOTTE:'; var stockName1 = stockInfo1.t; stockString1 += '<span class="stockSymbol "> ' + stockInfo1.t + ' </span>'; stockString1 += '<span class="stockPrice "> ' + stockInfo1.l + '</span>'; stockString1 += '<span class="stockChange "> ' + stockInfo1.c + '</span>'; stockString1 += '<span> at</span> <span class="stockTime">' + stockInfo1.ltt + '</span>'; stockString1 += '</div>'; $('.haul').prepend(stockString1); }); } }); 。您可能需要在不同的设备上处理也包含ImageEncodingProperties的枚举。