Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask

本文主要是介绍Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两个组件都属于选择器,而且它们也有很多相似的地方,最明显的上一点,它们都是用来选择图片。

 

 

一、CameraCaptureTask选择器。

 

它用于启动照相机,当你拍下照片后,自动把照的字节流返回给调用方应用程序。前文说过,启动器和选择的使用方法和步骤都是一样的。对于CameraCaptureTask组件也如此,不过注意的一点是,处理Completed事件时一定要记住,尽可能的使用页面类的Dispatcher.BeginInvoke方法,因为异步回调直接访问UI元素是不安全的,极有可能会引发异常,但我不是说绝对。

 

    <Grid><Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="auto"/></Grid.RowDefinitions><Image x:Name="img" Grid.Row="0" Stretch="Uniform"HorizontalAlignment="Stretch"VerticalAlignment="Stretch"/><Button x:Name="btnCamera" Grid.Row="1"Content="启动相机程序" Click="btnCamera_Click"/></Grid>


 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
// 引入以下命名空间。
using Microsoft.Phone.Tasks;
using System.Windows.Media.Imaging;namespace PhoneApp1
{public partial class MainPage : PhoneApplicationPage{// 第一步,声明类级别的局部变量,并实例化。CameraCaptureTask MyCamera = new CameraCaptureTask();// 构造函数public MainPage(){InitializeComponent();// 第二步,在页面构造函数中注册完成回调事件MyCamera.Completed += new EventHandler<PhotoResult>(MyCamera_Completed);}private void btnCamera_Click(object sender, RoutedEventArgs e){// 第三步,显示组件MyCamera.Show();}// 第四步,处理事返回结果void MyCamera_Completed(object sender, PhotoResult e){// 确定用户确认了还是取消了操作。if (e.TaskResult == TaskResult.OK){// 从返回的流中创建图象BitmapImage bmp = new BitmapImage();try{bmp.SetSource(e.ChosenPhoto);// 把图象作为Image控件的源。// 防止异步回调直接访问UI元素,故应使用BeginInvoke方法。Dispatcher.BeginInvoke(() =>{this.img.Source = bmp;});}catch (Exception ex){MessageBox.Show(ex.Message);}}}}
}


 

当然,在模拟器中你是不能进行拍摄的,但可以进行模拟操作,也就是说无论你拍的什么,最后都是返回同一张照片。

 

 

 

 

二、PhotoChooserTask选择器。

 

这个选择器已经包含CameraCaptureTask的功能,当然,它主要是为了选择图片。

1、ShowCamera属性设置是否显示可以让用户启动相机的按钮;

2、PixelHeight:选择图片后将其裁剪的高度;

3、PixelWidth属性与上面相同,裁剪宽度。

照片被选择后,以流的形式返回,驼过Completed事件的参数PhotoResult的ChosenPhoto属性获取。

 

    <Grid><Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="auto"/></Grid.RowDefinitions><Image x:Name="img" Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0"/><Grid Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition Width="auto"/><ColumnDefinition Width="auto"/><ColumnDefinition Width="auto"/><ColumnDefinition Width="auto"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition Height="auto"/></Grid.RowDefinitions><TextBlock Grid.Column="0" Grid.Row="0" Text="高度:"/><TextBlock Grid.Column="2" Grid.Row="0" Text="宽度:"/><TextBox x:Name="txtHeight" Grid.Column="1"Grid.Row="0" Width="160" Height="auto" FontSize="20"><TextBox.InputScope><InputScope><InputScopeName NameValue="Number"/></InputScope></TextBox.InputScope></TextBox><TextBox x:Name="txtWidth" Grid.Column="3"Grid.Row="0" Width="160" Height="auto" FontSize="20"><TextBox.InputScope><InputScope><InputScopeName NameValue="Number"/></InputScope></TextBox.InputScope></TextBox><CheckBox x:Name="chkShowCamera"Grid.Row="1" Grid.ColumnSpan="2"Content="显示启动相机"/><Button x:Name="btnShow"Grid.Column="2" Grid.Row="1"Grid.ColumnSpan="2"Content="选择图片..."Margin="5"Click="btnShow_Click"/></Grid></Grid>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
//
using Microsoft.Phone.Tasks;
using System.Windows.Media.Imaging;namespace PhoneApp1
{public partial class Page1 : PhoneApplicationPage{PhotoChooserTask ptc = new PhotoChooserTask();public Page1(){InitializeComponent();ptc.Completed += new EventHandler<PhotoResult>(ptc_Completed);}void ptc_Completed(object sender, PhotoResult e){if (e.TaskResult == TaskResult.OK){BitmapImage bmp = new BitmapImage();try{bmp.SetSource(e.ChosenPhoto);Dispatcher.BeginInvoke(() => {this.img.Source = bmp;});}catch (Exception ex){MessageBox.Show(ex.Message);}}}private void btnShow_Click(object sender, RoutedEventArgs e){// 设置相关属性ptc.PixelHeight = int.Parse(txtHeight.Text);ptc.PixelWidth=int.Parse(txtWidth.Text);ptc.ShowCamera = this.chkShowCamera.IsChecked.HasValue ? chkShowCamera.IsChecked.Value : false;ptc.Show();}}
}

 

 

 

 

这篇关于Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827833

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID