好吧,我的问题很简单:
如何使用相机拍摄带有Windows Store App
for的图片Windows Phone 8.1
?
MSDN 上的示例使用Windows.Media.Capture.CameraCaptureUI
,在 Windows Phone 上不可用,或者用于Silverlight
.
我找不到任何专门针对使用 Windows 运行时的 Windows Phone 应用程序的文档或示例。
如果有人知道,甚至有这方面的文档,我会很高兴。
3 回答
在 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);
如果您想捕捉视频,那么这里有更多信息。
也不要忘记添加清单文件,并Webcam
在.Capabilities
Front/Rear Camera
Requirements
如果您需要选择相机(前/后),您需要获取相机 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
和配置它来挑选图像。现在选择器将有一个相机按钮。用户可以单击相机按钮,内置相机应用程序将打开。用户拍照后,您将在您的应用中收到回调。FileOpenPicker
回调实现起来有点烦人,但它确实有效。如果您可以忍受可用性的影响,这可能是一种有效的方法。
在 2014 年 Microsoft 的 build-Conference 期间有一个关于此主题的会议。您可以通过此链接在线观看会议。
您可以采用此链接上的方法。一切都解释得很好。
只需使用PhotoCamera
该类,不要忘记在您的应用清单中启用相机使用