我正在使用MediaCapture class在Windows Phone 8.1 Runtime上拍照。我拍照的代码看起来像这样:
// create a file
StorageFile photoFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("myFirstPhoto.jpg", CreationCollisionOption.ReplaceExisting);
// take a photo with choosen Encoding
await captureManager.CapturePhotoToStorageFileAsync(ImageEncodingProperties.CreateJpeg(), photoFile);
代码工作得很好,因为我得到了一张照片,但左右两侧有奇怪的条纹:
我正在尝试找到解决此问题的方法,但没有成功。我错过了什么吗?
编辑 - 内置应用程序拍摄的照片没有条纹,所以这似乎不是硬件的问题。答案 0 :(得分:7)
好的,我自己已经弄明白了 - 这是使用MediaCapture
时设置为默认值的分辨率问题。如果您在初始化MediaCapture
之后设置了最大分辨率,那么就没有条纹:
// just after initialization
var maxResolution = captureManager.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo).Aggregate(
(i1, i2) => (i1 as VideoEncodingProperties).Width > (i2 as VideoEncodingProperties).Width ? i1 : i2);
await captureManager.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, maxResolution);
答案 1 :(得分:0)
我尝试使用最低分辨率获得相同的条纹。 从MS Advance Camera样本中,他们使用MediaCapture进行预览,但使用SilverLight API进行捕获!
每次调用CapturePhotoToXXX API时,MediaCapture都会出现内存泄漏问题。
我想知道他们是否已经知道MediaCapture在WindowsPhone 8.1上管理不当,这就是为什么他们不提供带有RT API的Camera MediaCapture样本的原因。