Windows Phone上的Windows Store应用程序的照片捕获
那么,我的问题很简单:
如何使用相机为使用Windows Phone 8.1
的Windows 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,内置的相机应用程序将打开。 一旦用户拍摄了照片,您将在您的应用中收到回叫。 FileOpenPicker
callback有点烦人的实现,但它的工作原理。 如果你能忍受可用性的影响,这可能是一个有效的方法。
在2014年的微软build设会议期间,有关此主题的会议。 您可以通过此链接在线观看会议。
你可以在这个链接上采取的方法。 一切都很好地解释。
只需使用PhotoCamera
类,不要忘记在您的应用程序清单中启用相机使用