MediaCapture Windows 8桌面应用程序 – 无法使其正常工作

我正在尝试通过此API实现图像捕获,我需要在via桌面应用程序中实现。

问题是,当我将图像保存到文件中时(使用CapturePhotoToStorageFileAsync ),我得到一张黑色图片(几乎是黑色),或者我得到零大小的文件。

我的代码非常简单:

 MediaCapture = new MediaCapture(); await mediaCapture.InitializeAsync(); Windows.Storage.StorageFile photoStorageFile; String PHOTO_FILE_NAME = "photo.jpg"; photoStorageFile = await Windows.Storage.KnownFolders.PicturesLibrary.CreateFileAsync(PHOTO_FILE_NAME, Windows.Storage.CreationCollisionOption.GenerateUniqueName); ImageEncodingProperties imageProperties = ImageEncodingProperties.CreateJpeg(); await mediaCapture.CapturePhotoToStorageFileAsync(imageProperties, photoStorageFile); 

我读了另一个关于它的post:在Windows Phone 8.1上使用MediaCapture时,捕获的照片是黑色的

问题是MediaCapture.StartPreviewAsync引发了一个exception“在请求的操作中发生了意外错误”,我猜其原因是我没有的MediaElement(再次,桌面)。

我也很高兴找到一个有效的例子,当我搜索时,我没有找到任何真正的样本来在桌面应用程序上实现MediaCapture,我看到一篇文章但没有附加代码: http : //blogs.msdn.com/b /eternalcoding/archive/2013/10/29/how-to-use-specific-winrt-api-from-desktop-apps-capturing-a-photo-using-your-webcam-into-a-wpf-app.aspx

我还发现其他人也问了一个样本,但没有真正的答案……

我怎样才能获得一份工作样本?

MediaCapture在桌面应用程序中预览相机video并MediaCapture 。 我不确定所有的部分都在那里,所以我在GitHub上放了一些代码来试试它,它似乎工作正常。

https://github.com/mmaitre314/MediaCaptureWPF

需要注意的是:构建MediaCapture / WPF互操作需要一些本机代码(C ++ / CLI),因此应用程序需要构建为x86或x64,而不是AnyCPU。

为了让您的商店应用与相机进行互动,实际上有两种方式,一种是简单方式,另一种是高级方式:

  • 通过使用提供的用户界面,这是一个用于捕获媒体的常用UI,它可以省去处理基本捕获操作的痛苦,
  • 或者通过自己与MediaCapture API进行交互,以获得对整个操作流程的完全控制。

如果您只是想从网络摄像头拍摄照片或video,我建议您使用主要使用CameraCaptureUI API的第一种方法,但如果您需要完全控制捕获操作,则需要一些代码行与MediaCapture API

这里是一个使用CameraCaptureUI API的简单示例:

假设我们有以下UI:

        

这里是捕获按钮单击处理程序:

 private async void TakePicture_Click(object sender, RoutedEventArgs e) { var camera = new CameraCaptureUI(); var image = await camera.CaptureFileAsync(CameraCaptureUIMode.Photo); if (image != null) { var stream = await image.OpenAsync(FileAccessMode.Read); var bitmap = new BitmapImage(); bitmap.SetSource(stream); Picture.Source = bitmap; } else { (new MessageDialog("Something went wrong")).ShowAsync(); } } 

您还需要通过检查App Manifest中的网络摄像头function,为您的应用程序提供使用网络摄像头的权限

在此处输入图像描述