参考:wp8.1之拍照(获取焦点,使用后置摄像头)

uwp开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流。今天讲讲如何打开摄像头,获取焦点,以及拍照。废话不多说,下面直接上代码。当然前提是一定要记住在appxmanifest文件Capabilities选项选择Webcam,不然会报错

首先 XAML代码:

  1. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  2. <Grid>
  3. <CaptureElement x:Name="capturePreview" Stretch="UniformToFill" />
  4. <Image Name="ProfilePic" />
  5. </Grid>
  6. <StackPanel VerticalAlignment="Bottom">
  7. <Slider
  8. x:Name="FocusValueSlider"
  9. Margin="12,0,15,0"
  10. Header="焦点调节:"
  11. LargeChange="25"
  12. Maximum="1000"
  13. Minimum="0"
  14. SmallChange="1"
  15. ValueChanged="FocusValueSlider_ValueChanged"
  16. Value="500" />
  17. <StackPanel Orientation="Horizontal">
  18. <Button Click="PhotographButton_Click" Content="启动摄像头" />
  19. <Button
  20. Margin="50,0,0,0"
  21. Click="CapturePhoto_Click"
  22. Content="拍照" />
  23. </StackPanel>
  24. </StackPanel>
  25. </Grid>
  1. //启动摄像头
  2. async private void PhotographButton_Click(object sender, RoutedEventArgs e)
  3. {
  4. if (captureManager == null)
  5. {
  6. capturePreview.Visibility = Visibility.Visible;
  7. ProfilePic.Visibility = Visibility.Collapsed;
  8. captureManager = new MediaCapture();
  9.  
  10. //选择后置摄像头
  11. var cameraDevice = await FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel.Back);
  12. if (cameraDevice == null)
  13. {
  14. System.Diagnostics.Debug.WriteLine("No camera device found!");
  15. return;
  16. }
  17. var settings = new MediaCaptureInitializationSettings
  18. {
  19. StreamingCaptureMode = StreamingCaptureMode.Video,
  20. //MediaCategory = MediaCategory.Other,
  21. //AudioProcessing = AudioProcessing.Default,
  22. //PhotoCaptureSource = PhotoCaptureSource.Photo,
  23. AudioDeviceId = string.Empty,
  24. VideoDeviceId = cameraDevice.Id
  25. };
  26. await captureManager.InitializeAsync(settings);
  27. //摄像头旋转90度
  28. //captureManager.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
  29. capturePreview.Source = captureManager;
  30. await captureManager.StartPreviewAsync();
  31. }
  32. }
  33. private static async Task<DeviceInformation> FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel desired)
  34. {
  35.  
  36. var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
  37.  
  38. DeviceInformation desiredDevice = allVideoDevices.FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == desired);
  39.  
  40. return desiredDevice ?? allVideoDevices.FirstOrDefault();
  41. }
  42. //拍照
  43. async private void CapturePhoto_Click(object sender, RoutedEventArgs e)
  44. {
  45.  
  46. if (captureManager != null)
  47. {
  48. capturePreview.Visibility = Visibility.Collapsed;
  49. ProfilePic.Visibility = Visibility.Visible;
  50. ProfilePic.Source = null;
  51. //declare string for filename
  52. string captureFileName = string.Empty;
  53.  
  54. //图片格式
  55. ImageEncodingProperties format = ImageEncodingProperties.CreateJpeg();
  56.  
  57. //创建本地存储文件夹
  58. StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
  59. "Photo"+DateTime.Now.ToString("yyMMddHHmmss")+".jpg",
  60. CreationCollisionOption.ReplaceExisting);
  61.  
  62. await captureManager.CapturePhotoToStorageFileAsync(format, file);
  63.  
  64. BitmapImage bmpImage = new BitmapImage(new Uri(file.Path));
  65.  
  66. ProfilePic.Source = bmpImage;//释放摄像头资源
  67. capturePreview.Visibility = Visibility.Visible;
  68. ProfilePic.Visibility = Visibility.Collapsed;
  69. //captureManager.Dispose();
  70. //captureManager = null;
  71. }
  72.  
  73. }
  74. private void FocusValueSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
  75. {
  76. try
  77. {
  78.  
  79. uint focus = Convert.ToUInt32(e.NewValue);
  80. SetFocus(focus);
  81. }
  82. catch
  83. {
  84.  
  85. }
  86. }
  87. //设置摄像头焦点方法
  88. private async void SetFocus(uint? focusValue = null)
  89. {
  90.  
  91. try
  92. {
  93.  
  94. if (!focusValue.HasValue)
  95. {
  96. focusValue = ;
  97. }
  98.  
  99. if (captureManager.VideoDeviceController.FocusControl.Supported)
  100. {
  101.  
  102. captureManager.VideoDeviceController.FlashControl.AssistantLightEnabled = false;
  103.  
  104. captureManager.VideoDeviceController.FocusControl.Configure(new FocusSettings() { Mode = FocusMode.Manual, Value = focusValue, DisableDriverFallback = true });
  105.  
  106. await captureManager.VideoDeviceController.FocusControl.FocusAsync();
  107. }
  108. }
  109. catch { }
  110. }

uwp之拍照(使用后置摄像头)的更多相关文章

  1. wp8.1之拍照(获取焦点,使用后置摄像头)

    wp8.1 没有像wp8一样直接用启动器开启摄像头,他要开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流.今天讲讲如何打开摄像头,获取焦点,以及拍照.废话不多说 ...

  2. android实现前置后置摄像头相互切换

    首先自定义一个继承自SurfaceView并且实现了SurfaceHolder.Callback接口的组件: public class CameraView extends SurfaceView i ...

  3. win 10 禁用后置摄像头

    2.双摄像头电脑,甄别时默认开启的是后置摄像头,识别不到人脸. (1)更换设备参加甄别: (2)自行调整:停用电脑后置摄像头,停用后甄别时会默认调取前置摄像头: 以下操作适用于Windows surf ...

  4. HTML5 选择前置摄像头,选择后置摄像头

    最近发现我写的都是乱七八糟的,觉得应该给大家带点福利,于是写了这篇 背景:最近想做个web应用,需要用到摄像头,但是发现默认一直是前置摄像头,拍照很麻烦,于是找了很多文章,居然没有人提到,只好FQ去找 ...

  5. android Camera 如何判断当前使用的摄像头是前置还是后置

    现在 android 平台的智能手机一般都标配有两颗摄像头.在 Camera 中都存在摄像头切换的功能. 并且有一些功能前后置摄像头上会有所不同.譬如人脸检测,人脸识别,自动对焦,闪光灯等功能, 如果 ...

  6. Linux笔记(固定USB摄像头硬件端口,绑定前后置摄像头)

    在Android的系统会有前置摄像头和后置摄像头的定义,摄像头分为SOC类型的摄像头和USB这一类的摄像头,接下要分析就是USB摄像头这一类 . 一般在android或者linux系统中分析一个模块, ...

  7. Android切换前后置摄像头并录制视频

    项目需要对微信的视频模块也看了一下,在此就对这块进行了一个开发.首先给出效果图 首先给出java代码 /** * RecordActivity.java * 版权所有(C) 2013 * 创建:cui ...

  8. JMeter学习-009-JMeter 后置处理器实例之 - 正则表达式提取器(二)多参数获取

    前文简述了通过后置处理器 - 正则表达式提取器 获取 HTTP请求 响应结果中的特定数据,未看过的亲,敬请参阅 JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一). ...

  9. JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)概述及简单实例

    上文我们讲述了如何对 HTTP请求 的响应数据进行断言,以判断响应是否符合我们的预期,敬请参阅:JMeter学习-007-JMeter 断言实例之一 - 响应断言 那么我们如何获取 HTTP请求 响应 ...

随机推荐

  1. gdal以GA_Update方式打开jpg文件的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 gdal库是不支持以GA_Update方式打开jpg文件的,原因在于gdal_1_10_1\frmts\jpeg文件夹 ...

  2. 【matlab】安装 webcam 支持

    打开 matlab 命令行,输入 webcam,如果提示: 尚未安装 MATLAB Support Package for USB Webcams.打开支持包安装程序即可安装 Webcam Suppo ...

  3. Android Studio官方文档: 如何在你的设备上运行你的程序

    在实体设备上运行您的应用 设置您的设备,如下所示: 使用一根 USB 电缆将您的设备连接到您的开发机器. 如果您是在 Windows 上开发,可能需要为您的设备安装相应的 USB 驱动程序.如需帮助安 ...

  4. 【cocos2dx 加载资源目录】

    从互联网下载vsproject代码.编译一切都还好吗,当发现向导的最后一个执行create没有找到图片功能异常.看图片Resource的内容下表,他没有排除的图像的可能性. 那么之后呢?!仅仅能是pr ...

  5. 机器审核图片学习(2)安装pornDetector所用环境-python、scikit-learn、opencv

    1.安装python 下载安装即可:最好是C盘 路径:https://www.python.org/ 将Python的安装路径加到path环境变量中,Python/Scripts加到path环境变量 ...

  6. twemproxy接收流程探索——剖析twemproxy代码正编

    本文旨在帮助大家探索出twemproxy接收流程的代码逻辑框架,有些具体的实现需要我们在未来抽空去探索或者大家自行探索.在这篇文章开始前,大家要做好一个小小的心理准备,由于twemproxy代码是一份 ...

  7. 用ORACHK自己主动化检查数据库系统的健壮性

    1.orachk工具主要用途 (1)主动检查您的整个软件在操作系统.CRS.数据库.高可用等层面中的严重问题,以便于IT部门整改,提升系统的稳定性 (2)对于您系统中存在的风险提供简单化和合理化的诊断 ...

  8. wpf无边框窗体移动和大小调整

    原文:wpf无边框窗体移动和大小调整   using System; using System.Windows; using System.Windows.Interop; namespace Wpf ...

  9. wpf之自定义滚动条

    原文:wpf之自定义滚动条 首先我们添加一个带滚动条的textbox控件: <ScrollViewer Height="130" Width="620" ...

  10. ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基本项目目录结构 上一章节中我们成功创建了一个名为 Hell ...