在适用于 Windows Phone 的 Windows Store 应用程序上捕获照片 [英] Photo capture on Windows Store App for Windows Phone

查看:20
本文介绍了在适用于 Windows Phone 的 Windows Store 应用程序上捕获照片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗯,我的问题很简单:
如何使用适用于 Windows Phone 8.1Windows Store App 使用相机拍摄图片?
MSDN 上的示例使用 Windows.Media.Capture.CameraCaptureUI,它在 Windows Phone 上不可用,或者用于 Silverlight.
我找不到任何专门针对使用 Windows 运行时的 Windows Phone 应用程序的文档或示例.
如果有人知道,或者甚至有这方面的文档,我会很高兴.

Well, my question is simple:
How do I capture pictures with a Windows Store App for Windows Phone 8.1, using the camera?
The samples on MSDN use Windows.Media.Capture.CameraCaptureUI, which is not usable on Windows Phone, or are for Silverlight.
I can't find any doc or sample specifically for Windows Phone app using Windows Runtime.
If someone knows, or even have the doc for this, I would be glad.

推荐答案

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

In WP8.1 Runtime (also in Silverlight) you can use MediaCapture. In short:

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

如果您需要预览,可以使用 捕获元素:

If you need a preview you can use a CaptureElement:

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

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

Then in the code behind you can start/stop previewing like this:

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

最后要拍一张照片,例如你可以直接把它放到一个文件 CapturePhotoToStorageFileAsync 或流CapturePhotoToStreamAsync:

Finally to take a Photo you can for example take it directly to a file CapturePhotoToStorageFileAsync or to a 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);

如果您想捕获视频,请这里有更多信息.

If you want to capture video then here is more information.

另外不要忘记在清单文件的Capabilities 中添加Webcam,在Requirements<中添加Front/Rear Camera/代码>.

Also don't forget to add Webcam in Capabilities of your manifest file, and Front/Rear Camera in Requirements.

如果您需要选择相机(前/后),您将需要获取相机 ID,然后使用所需设置初始化 MediaCapture:

In case you need to choose a Camera (fornt/back), you will need to get the Camera Id and then initialize MediaCapture with desired settings:

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 的 Windows Store 应用程序上捕获照片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆