我正在创建Windows Universal应用程序。 我希望用户能够上传图片,并且用户应该可以选择当场拍摄并发送。 我使用MediaCapture API进行此工作。 但是,我似乎只能使用一个摄像头,因此例如,如果我的手机具有前置和后置摄像头,则仅使用前置摄像头。 如何切换使用中的相机?

我读过一些有关使用这样的东西的信息:

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);

    return deviceID;
}

但是,由于deviceID始终为null,因此它始终为我返回null。

另外,是否可以控制拍摄照片并将拍摄的照片返回给我的应用程序的应用程序? 我发现了以下内容,但不适用于Windows Universal应用程序: http : //msdn.microsoft.com/en-us/library/windows/apps/hh394006(v=vs.105).aspx

#1楼 票数:4 已采纳

这是我的方法:

首先初始化部分

// First need to find all webcams
DeviceInformationCollection webcamList = await DeviceInformation.FindAllAsync(DeviceClass.All)

// Then I do a query to find the front webcam
DeviceInformation frontWebcam = (from webcam in webcamList
 where webcam.EnclosureLocation != null 
 && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front
 select webcam).FirstOrDefault();

// Same for the back webcam
DeviceInformation backWebcam = (from webcam in webcamList
 where webcam.EnclosureLocation != null 
 && webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back
 select webcam).FirstOrDefault();

// Then you need to initialize your MediaCapture
newCapture  = new MediaCapture();
await newCapture.InitializeAsync(new MediaCaptureInitializationSettings
        {
            // Choose the webcam you want
            VideoDeviceId = backWebcam.Id,
            AudioDeviceId = "",
            StreamingCaptureMode = StreamingCaptureMode.Video,
            PhotoCaptureSource = PhotoCaptureSource.VideoPreview
        });

// Set the source of the CaptureElement to your MediaCapture
// (In my XAML I called the CaptureElement *Capture*)
Capture.Source = newCapture;

// Start the preview
await newCapture.StartPreviewAsync();

其次拍照

//Set the path of the picture you are going to take
StorageFolder folder = ApplicationData.Current.LocalFolder;
var picPath = "\\Pictures\\newPic.jpg";

StorageFile captureFile = await folder.CreateFileAsync(picPath, CreationCollisionOption.GenerateUniqueName);

ImageEncodingProperties imageProperties = ImageEncodingProperties.CreateJpeg();

//Capture your picture into the given storage file
await newCapture.CapturePhotoToStorageFileAsync(imageProperties, captureFile);

那应该解决您的问题。

  ask by WereWolfBoy translate from so

未解决问题?本站智能推荐:

1回复

Windows Phone 8.1应用在使用ChatMessageManager.RequestStoreAsync()时会引发访问被拒绝

我正在开发Windows Phone 8.1应用程序。 应用程序具有一些功能,它希望在不向用户提示编写窗口的情况下在后台发送短信。 我遇到的大多数示例都在向用户提示撰写窗口。 下面是我尝试使用的代码。 但是它抛出 执行“ ChatMessageStore cms =等待Chat
1回复

将WP 8.1 SilverLight升级到WP 8.1 Universal时ApplicationData.LocalSettings会发生什么

我已经有一个WP 8.1 Silverlight应用程序在商店中。 它使用ApplicationData.LocalSettings保存其本地设置。 我打算将此应用程序迁移到Windows 8.1通用版。 然后将目标对准Windows 10。 我的问题是,升级时存储在Applic
1回复

WP8.1 - CancellationToken和async仍在等待永远,永远不会结束

我有一个非常奇怪的问题,我不知道如何解决它。 我在不同的类中有这两种方法。 按下CommandBar中的按钮时会触发第一个按钮。 编辑:我创建了两个相似但更小的方法来向您展示问题: 我添加了一个在1500ms后过期的cancellationToken(我假设如果解释器需要更长的
3回复

如何在Windows Phone 8.1中使用正确的旋转,宽高比拍摄照片? (使用MediaCapture)

您是否可以使用MediaCapture元素提供有关如何拍摄和保存照片的实际工作示例。 我曾尝试在MSDN中寻找实际的解决方案,但这些解释或代码都没有以简单的方式描述过程。 我需要拍照并将其保存到我的库(我需要为此显示正确的预览),但是现在它旋转了90度而我无法调整它。 我已经尝试设置视
1回复

Windows Universal应用程序,页面未显示相机

我一直在尝试制作“夜视”应用,并一直在关注此人 。 我查看了他的代码并尝试创建该应用程序。 我完成了该应用程序,并在测试该应用程序时,它并没有征求使用相机的许可(其他人的..并在屏幕上显示了相机),并且它保持空白,完全没有相机视图。 我在Windows Phone和Windows 8.1上
1回复

如何在Windows / Phone 8.1 ListView中设置组背景的样式?

我有一个ListView绑定到分组数据。 我想要的是能够根据项目的内容绑定每个组的背景。 在8.1中不推荐使用GroupStyle.ContainerStyle,而无需更改ListView的ItemsPanel。 不幸的是,这会降低性能。 有没有一种方法可以在不更改ListView的
1回复

Windows手机8.1相机预览黑色边缘旋转

我在Windows Phone 8.1上使用视频预览来拍照。 没有旋转,预览没有黑色边缘。 旋转90度后,捕捉元素上出现条纹。 这是我的截图和XAML,c#代码。 XAML C# 图片旋转 没有旋转
1回复

如何在Windows Store Universal App(W8.1 + WP8.1)中格式化日期?

我在玩新的Windows Store Universal App模板,该模板可用于Windows 8.1和Windows Phone 8.1,并且想知道如何在XAML代码中格式化字符串。 我尝试过的(XAML): 问题是StringFormat在Windows.UI.Xaml.Co