Windows Phone上的Windows Store应用程序的照片捕获

那么,我的问题很简单:
如何使用相机为使用Windows Phone 8.1Windows Store App捕获照片?
MSDN上的示例使用Windows.Media.Capture.CameraCaptureUI ,这在Windows Phone上不可用,或者用于Silverlight
我无法find使用Windows运行时专门为Windows Phone应用程序的任何文档或示例。
如果有人知道,甚至有这个文件,我会很高兴。

在WP8.1运行时(也在Silverlight中),您可以使用MediaCapture 。 简而言之:

 // First you will need to initialize MediaCapture Windows.Media.Capture.MediaCapture takePhotoManager = new Windows.Media.Capture.MediaCapture(); await takePhotoManager.InitializeAsync(); 

如果您需要预览,则可以使用CaptureElement :

 // In XAML: <CaptureElement x:Name="PhotoPreview"/> 

然后在后面的代码中可以像这样开始/停止预览:

 // start previewing PhotoPreview.Source = takePhotoManager; await takePhotoManager.StartPreviewAsync(); // to stop it await takePhotoManager.StopPreviewAsync(); 

最后拍一张照片,你可以直接把它拿到一个文件CapturePhotoToStorageFileAsync或者一个Stream CapturePhotoToStreamAsync :

 ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg(); // a file to save a photo StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync( "Photo.jpg", CreationCollisionOption.ReplaceExisting); await takePhotoManager.CapturePhotoToStorageFileAsync(imgFormat, file); 

如果你想捕捉video,那么这里是更多的信息 。

另外,不要忘记在清单文件的Capabilities中添加Webcam ,并在Requirements添加Front/Rear Camera


如果您需要select相机(fornt / back),则需要获取相机ID,然后使用所需的设置初始化MediaCapture

 private static async Task<DeviceInformation> GetCameraID(Windows.Devices.Enumeration.Panel desired) { DeviceInformation deviceID = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture)) .FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == desired); if (deviceID != null) return deviceID; else throw new Exception(string.Format("Camera of type {0} doesn't exist.", desired)); } async private void InitCamera_Click(object sender, RoutedEventArgs e) { var cameraID = await GetCameraID(Windows.Devices.Enumeration.Panel.Back); captureManager = new MediaCapture(); await captureManager.InitializeAsync(new MediaCaptureInitializationSettings { StreamingCaptureMode = StreamingCaptureMode.Video, PhotoCaptureSource = PhotoCaptureSource.Photo, AudioDeviceId = string.Empty, VideoDeviceId = cameraID.Id }); } 

在通用的Windows Phone 8.1(WinRT)应用程序中,不能再直接跳到内置的相机应用程序,并在拍摄照片时收到回叫。

要做到这一点,你必须实现Windows.Media.Capture.MediaCapture如上所述。 曾经有过CameraCatureUI但在Windows Phone 8.1的WinRT应用程序中不可用。

但是有一个“解决方法”。 您可以使用Windows.Storage.Pickers.FileOpenPicker并将其configuration为select图像。 现在选取器会有一个相机button。 用户可以点击相机button,内置的相机应用程序将打开。 一旦用户拍摄了照片,您将在您的应用中收到回叫。 FileOpenPickercallback有点烦人的实现,但它的工作原理。 如果你能忍受可用性的影响,这可能是一个有效的方法。

在2014年的微软build设会议期间,有关此主题的会议。 您可以通过此链接在线观看会议。

你可以在这个链接上采取的方法。 一切都很好地解释。

只需使用PhotoCamera类,不要忘记在您的应用程序清单中启用相机使用

Interesting Posts