在Windows Phone 8.1上使用MediaCapture时,拍摄的照片是黑色的

时间:2015-02-03 14:37:43

标签: windows-phone windows-phone-8.1

我正在使用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不会引发异常。

1 个答案:

答案 0 :(得分:1)

如果我们有CaptureElement,将其设置为MediaCapture对象,在拍摄照片之前调用MediaCapture.StartPreviewAsync,拍摄照片(使用CapturePhotoToStorageFileAsync)并最终调用StopPreviewAsync,则会正确捕获照片。 MediaCapture似乎需要现有(并显示)预览才能捕捉照片。奇怪的是,没有记录这一点,并且在没有预览的情况下使用CapturePhotoToStorageFileAsync不会引发异常。