uwp之拍照(使用后置摄像头)
uwp开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流。今天讲讲如何打开摄像头,获取焦点,以及拍照。废话不多说,下面直接上代码。当然前提是一定要记住在appxmanifest文件Capabilities选项选择Webcam,不然会报错
首先 XAML代码:
- <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
- <Grid>
- <CaptureElement x:Name="capturePreview" Stretch="UniformToFill" />
- <Image Name="ProfilePic" />
- </Grid>
- <StackPanel VerticalAlignment="Bottom">
- <Slider
- x:Name="FocusValueSlider"
- Margin="12,0,15,0"
- Header="焦点调节:"
- LargeChange="25"
- Maximum="1000"
- Minimum="0"
- SmallChange="1"
- ValueChanged="FocusValueSlider_ValueChanged"
- Value="500" />
- <StackPanel Orientation="Horizontal">
- <Button Click="PhotographButton_Click" Content="启动摄像头" />
- <Button
- Margin="50,0,0,0"
- Click="CapturePhoto_Click"
- Content="拍照" />
- </StackPanel>
- </StackPanel>
- </Grid>
- //启动摄像头
- async private void PhotographButton_Click(object sender, RoutedEventArgs e)
- {
- if (captureManager == null)
- {
- capturePreview.Visibility = Visibility.Visible;
- ProfilePic.Visibility = Visibility.Collapsed;
- captureManager = new MediaCapture();
- //选择后置摄像头
- var cameraDevice = await FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel.Back);
- if (cameraDevice == null)
- {
- System.Diagnostics.Debug.WriteLine("No camera device found!");
- return;
- }
- var settings = new MediaCaptureInitializationSettings
- {
- StreamingCaptureMode = StreamingCaptureMode.Video,
- //MediaCategory = MediaCategory.Other,
- //AudioProcessing = AudioProcessing.Default,
- //PhotoCaptureSource = PhotoCaptureSource.Photo,
- AudioDeviceId = string.Empty,
- VideoDeviceId = cameraDevice.Id
- };
- await captureManager.InitializeAsync(settings);
- //摄像头旋转90度
- //captureManager.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
- capturePreview.Source = captureManager;
- await captureManager.StartPreviewAsync();
- }
- }
- private static async Task<DeviceInformation> FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel desired)
- {
- var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
- DeviceInformation desiredDevice = allVideoDevices.FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == desired);
- return desiredDevice ?? allVideoDevices.FirstOrDefault();
- }
- //拍照
- async private void CapturePhoto_Click(object sender, RoutedEventArgs e)
- {
- if (captureManager != null)
- {
- capturePreview.Visibility = Visibility.Collapsed;
- ProfilePic.Visibility = Visibility.Visible;
- ProfilePic.Source = null;
- //declare string for filename
- string captureFileName = string.Empty;
- //图片格式
- ImageEncodingProperties format = ImageEncodingProperties.CreateJpeg();
- //创建本地存储文件夹
- StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
- "Photo"+DateTime.Now.ToString("yyMMddHHmmss")+".jpg",
- CreationCollisionOption.ReplaceExisting);
- await captureManager.CapturePhotoToStorageFileAsync(format, file);
- BitmapImage bmpImage = new BitmapImage(new Uri(file.Path));
- ProfilePic.Source = bmpImage;//释放摄像头资源
- capturePreview.Visibility = Visibility.Visible;
- ProfilePic.Visibility = Visibility.Collapsed;
- //captureManager.Dispose();
- //captureManager = null;
- }
- }
- private void FocusValueSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
- {
- try
- {
- uint focus = Convert.ToUInt32(e.NewValue);
- SetFocus(focus);
- }
- catch
- {
- }
- }
- //设置摄像头焦点方法
- private async void SetFocus(uint? focusValue = null)
- {
- try
- {
- if (!focusValue.HasValue)
- {
- focusValue = ;
- }
- if (captureManager.VideoDeviceController.FocusControl.Supported)
- {
- captureManager.VideoDeviceController.FlashControl.AssistantLightEnabled = false;
- captureManager.VideoDeviceController.FocusControl.Configure(new FocusSettings() { Mode = FocusMode.Manual, Value = focusValue, DisableDriverFallback = true });
- await captureManager.VideoDeviceController.FocusControl.FocusAsync();
- }
- }
- catch { }
- }
uwp之拍照(使用后置摄像头)的更多相关文章
- wp8.1之拍照(获取焦点,使用后置摄像头)
wp8.1 没有像wp8一样直接用启动器开启摄像头,他要开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流.今天讲讲如何打开摄像头,获取焦点,以及拍照.废话不多说 ...
- android实现前置后置摄像头相互切换
首先自定义一个继承自SurfaceView并且实现了SurfaceHolder.Callback接口的组件: public class CameraView extends SurfaceView i ...
- win 10 禁用后置摄像头
2.双摄像头电脑,甄别时默认开启的是后置摄像头,识别不到人脸. (1)更换设备参加甄别: (2)自行调整:停用电脑后置摄像头,停用后甄别时会默认调取前置摄像头: 以下操作适用于Windows surf ...
- HTML5 选择前置摄像头,选择后置摄像头
最近发现我写的都是乱七八糟的,觉得应该给大家带点福利,于是写了这篇 背景:最近想做个web应用,需要用到摄像头,但是发现默认一直是前置摄像头,拍照很麻烦,于是找了很多文章,居然没有人提到,只好FQ去找 ...
- android Camera 如何判断当前使用的摄像头是前置还是后置
现在 android 平台的智能手机一般都标配有两颗摄像头.在 Camera 中都存在摄像头切换的功能. 并且有一些功能前后置摄像头上会有所不同.譬如人脸检测,人脸识别,自动对焦,闪光灯等功能, 如果 ...
- Linux笔记(固定USB摄像头硬件端口,绑定前后置摄像头)
在Android的系统会有前置摄像头和后置摄像头的定义,摄像头分为SOC类型的摄像头和USB这一类的摄像头,接下要分析就是USB摄像头这一类 . 一般在android或者linux系统中分析一个模块, ...
- Android切换前后置摄像头并录制视频
项目需要对微信的视频模块也看了一下,在此就对这块进行了一个开发.首先给出效果图 首先给出java代码 /** * RecordActivity.java * 版权所有(C) 2013 * 创建:cui ...
- JMeter学习-009-JMeter 后置处理器实例之 - 正则表达式提取器(二)多参数获取
前文简述了通过后置处理器 - 正则表达式提取器 获取 HTTP请求 响应结果中的特定数据,未看过的亲,敬请参阅 JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一). ...
- JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)概述及简单实例
上文我们讲述了如何对 HTTP请求 的响应数据进行断言,以判断响应是否符合我们的预期,敬请参阅:JMeter学习-007-JMeter 断言实例之一 - 响应断言 那么我们如何获取 HTTP请求 响应 ...
随机推荐
- gdal以GA_Update方式打开jpg文件的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 gdal库是不支持以GA_Update方式打开jpg文件的,原因在于gdal_1_10_1\frmts\jpeg文件夹 ...
- 【matlab】安装 webcam 支持
打开 matlab 命令行,输入 webcam,如果提示: 尚未安装 MATLAB Support Package for USB Webcams.打开支持包安装程序即可安装 Webcam Suppo ...
- Android Studio官方文档: 如何在你的设备上运行你的程序
在实体设备上运行您的应用 设置您的设备,如下所示: 使用一根 USB 电缆将您的设备连接到您的开发机器. 如果您是在 Windows 上开发,可能需要为您的设备安装相应的 USB 驱动程序.如需帮助安 ...
- 【cocos2dx 加载资源目录】
从互联网下载vsproject代码.编译一切都还好吗,当发现向导的最后一个执行create没有找到图片功能异常.看图片Resource的内容下表,他没有排除的图像的可能性. 那么之后呢?!仅仅能是pr ...
- 机器审核图片学习(2)安装pornDetector所用环境-python、scikit-learn、opencv
1.安装python 下载安装即可:最好是C盘 路径:https://www.python.org/ 将Python的安装路径加到path环境变量中,Python/Scripts加到path环境变量 ...
- twemproxy接收流程探索——剖析twemproxy代码正编
本文旨在帮助大家探索出twemproxy接收流程的代码逻辑框架,有些具体的实现需要我们在未来抽空去探索或者大家自行探索.在这篇文章开始前,大家要做好一个小小的心理准备,由于twemproxy代码是一份 ...
- 用ORACHK自己主动化检查数据库系统的健壮性
1.orachk工具主要用途 (1)主动检查您的整个软件在操作系统.CRS.数据库.高可用等层面中的严重问题,以便于IT部门整改,提升系统的稳定性 (2)对于您系统中存在的风险提供简单化和合理化的诊断 ...
- wpf无边框窗体移动和大小调整
原文:wpf无边框窗体移动和大小调整 using System; using System.Windows; using System.Windows.Interop; namespace Wpf ...
- wpf之自定义滚动条
原文:wpf之自定义滚动条 首先我们添加一个带滚动条的textbox控件: <ScrollViewer Height="130" Width="620" ...
- ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基本项目目录结构 上一章节中我们成功创建了一个名为 Hell ...