我正在尝试通过此API实现图像捕获,我需要在桌面应用程序中实现。
问题在于,当我将图像保存到文件中时(使用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);
我读了另一个关于它的帖子: Captured photos are black when using MediaCapture on Windows Phone 8.1
问题是MediaCapture.StartPreviewAsync
引发了异常“在请求的操作中发生了意外错误”,我猜其原因是我没有的MediaElement(再次,桌面)。 / p>
我也很高兴找到一个有效的例子,当我搜索时,我没有找到任何实际样本来在桌面应用程序上实现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
我还发现其他人也问了一个样本,但没有真正的答案......
我怎样才能得到一份工作样本?
答案 0 :(得分:1)
让MediaCapture
在桌面应用中预览相机视频并非易事。我不确定所有的部分都在那里所以我在GitHub上放了一些代码来试试它,它似乎工作正常。
https://github.com/mmaitre314/MediaCaptureWPF
一个警告:构建MediaCapture / WPF互操作需要一些本机代码(C ++ / CLI),因此应用程序需要构建为x86或x64,而不是AnyCPU。
答案 1 :(得分:0)
为了使您的商店应用与相机互动,实际上有两种方式,一种是简单的,一种是高级的:
如果您只想拍摄照片或视频
网络摄像头,我建议您使用主要使用CameraCaptureUI
API的第一种方法,但如果您需要完全控制捕获操作,则需要一些与MediaCapture
API交互的代码行
这是一个使用CameraCaptureUI API的简单示例:
假设我们有以下用户界面:
<StackPanel Orientation="Vertical">
<Button Click="TakePicture_Click" Content="Capture Photo" HorizontalAlignment="Stretch"/>
<Border BorderBrush="White" BorderThickness="3">
<Image x:Name="Picture" Height="700" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
</StackPanel>
此处捕获按钮单击处理程序:
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中的网络摄像头功能,为您的应用提供使用网络摄像头的权限