我正在使用MediaCapture来捕捉照片并存储它们。它适用于模拟器。但是当在真实手机(诺基亚Lumia 530)上运行应用程序时,拍摄的照片只是黑色。它们具有正确的大小,文件具有一定的字节长度,但在显示照片时它是黑色的。请注意,我不使用Silverlight,并修复使用MediaCapture。使用默认相机应用程序时,手机上的相机可以正常工作。应用程序的清单包括“图片库”和“网络摄像头”功能。
有人知道可能出现什么问题吗?
以下是我使用的测试代码:
using (var mediaCapture = new MediaCapture())
{
await mediaCapture.InitializeAsync();
ImageEncodingProperties imageFormat = ImageEncodingProperties.CreateJpeg();
StorageFile photoFile = await KnownFolders.PicturesLibrary.CreateFileAsync("TestPhoto.jpg", CreationCollisionOption.GenerateUniqueName);
await mediaCapture.CapturePhotoToStorageFileAsync(imageFormat, photoFile);
BitmapImage bitmap = new BitmapImage();
using (var photoStream = await photoFile.OpenReadAsync())
{
bitmap.SetSource(photoStream);
}
}
修改
我找到了解决方案。如果我们有CaptureElement,将其设置为MediaCapture对象,在拍摄照片之前调用MediaCapture.StartPreviewAsync,拍摄照片(使用CapturePhotoToStorageFileAsync)并最终调用StopPreviewAsync,则会正确捕获照片。 MediaCapture似乎需要现有(并显示)预览才能捕捉照片。奇怪的是,没有记录这一点,并且在没有预览的情况下使用CapturePhotoToStorageFileAsync不会引发异常。
答案 0 :(得分:1)
如果我们有CaptureElement,将其设置为MediaCapture对象,在拍摄照片之前调用MediaCapture.StartPreviewAsync,拍摄照片(使用CapturePhotoToStorageFileAsync)并最终调用StopPreviewAsync,则会正确捕获照片。 MediaCapture似乎需要现有(并显示)预览才能捕捉照片。奇怪的是,没有记录这一点,并且在没有预览的情况下使用CapturePhotoToStorageFileAsync不会引发异常。