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请求 响应 ...
随机推荐
- 理解Erlang/OTP - Application
http://www.cnblogs.com/me-sa/archive/2011/12/27/erlang0025.html 1>application:start(log4erl). 我们就 ...
- Delphi 7验证XML合法性(利用DTD、XSD)
拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML S ...
- 【t016】邮递员
Time Limit: 1 second Memory Limit: 32 MB [问题描述] 邮局需要你来帮助他们为某个邮递员设计出一条能够穿过那遥远乡村的所有村子和小路至少一次的邮路(输入数据将会 ...
- Canvas,Matrix的变换顺序
Canvas的几何变换是倒序的,Matrix是正序. 比如先平移在旋转: canvas.rotate(); canvas.translate(); //translate先执行,rotate后执行 M ...
- SQL基础问题整理
在程序中,数据库操作是必不可少的部分,所以我们要备足数据库相关知识才能去应付程序中出现的种种问题.基于此,我特地在国外网站.博客上整理了一些问题,并附带了答案和解释.参考.为了保证“原汁原味”,我就保 ...
- Android 对.properties文件的读取
/** * * @param filepath .properties文件的位置 */ public void checkFileExists(String filepath){ File file ...
- Qt::WindowFlags枚举类型(Qt::Widget是独立窗口和子窗口两用的,Qt::Window会有标题栏)
Qt::Widget : QWidget构造函数的默认值,如新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件. Qt::Window : 无论是否有父窗口部件,新窗口部件都是一 ...
- uwp - 禁用屏幕翻转/禁用屏幕旋转/禁用横屏模式
原文:uwp - 禁用屏幕翻转/禁用屏幕旋转/禁用横屏模式 解决方案目录 > Package.appxmanifest 双击打开,把支持的旋转:纵向勾上,只勾这一个其他不勾,就可以了.同理,想让 ...
- DDD实战9 经销商领域上下文
1.创建Dealer.Domain 类库项目 2.创建实体和值对象 3.安装ef的包 4.创建上下文接口(IDealerContext)之所以要创建上下文接口,是为了可替换,在其他项目总使用接口,当需 ...
- 用 Expression Blend 创建酷炫的 Button
原文:用 Expression Blend 创建酷炫的 Button 原文:Creating "Cool" Buttons with Expression Blend Author ...