Reputation: 35
I'm trying to implement an image capture via this API, and I need to implement in via desktop application.
The problem is that when I save the image into a file (with CapturePhotoToStorageFileAsync
) I get a dark picture (almost black), or I get zero size file.
My code is very simple though:
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);
I read another thread about it: Captured photos are black when using MediaCapture on Windows Phone 8.1
The problem is that MediaCapture.StartPreviewAsync
raised an exception "An unexpected error has occured in the operation requested", and I guess the reason for that is the MediaElement which I don't have (again, desktop).
I'll also glad to find a working example, when I searched, I didn't find any real sample to implement MediaCapture on desktop application, I saw an article but without attached code: 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
I also found that others also asked about a sample, but with no real answer...
How can I get a working sample for that?
Upvotes: 0
Views: 1705
Reputation: 522
Getting MediaCapture
to preview the camera video in Desktop apps is not trivial. I wasn't sure all the pieces were there so I put together some code on GitHub to try it out and it seems to work ok.
https://github.com/mmaitre314/MediaCaptureWPF
One caveat: building the MediaCapture/WPF interop required some native code (C++/CLI), so the app needs to be built as either x86 or x64, but not AnyCPU.
Upvotes: 1
Reputation: 9944
In order for your store app to interact with the Camera there are actually two ways, a simple one, and an advanced one:
if you just want to take a picture or a video from the
webcam, i suggest you use the first approach which mainly use the CameraCaptureUI
API, but if you need complete control over the capturing operation, you need some lines of codes that interact with the MediaCapture
APIs
here a simple example using the CameraCaptureUI API :
let say we have the following UI:
<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>
and here the capture button click handler:
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();
}
}
you need also to offer your app the permission to use the webcam by checking the Webcam capability in the App Manifest
Upvotes: 0