博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask
阅读量:5090 次
发布时间:2019-06-13

本文共 4823 字,大约阅读时间需要 16 分钟。

原文:

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

 

 

一、CameraCaptureTask选择器。

 

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

 

 

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
(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属性获取。

 

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

 

 

 

 

posted on
2014-03-05 15:44 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/3582626.html

你可能感兴趣的文章
element-UI 表单校验失效处理
查看>>
定义一个函数,实现整数列表中偶数在左边,奇数在右边(不借助其它列表)
查看>>
SQL.PRO_PageForIdTable
查看>>
[转]计算机是如何启动的?
查看>>
JVM生产环境参数实例及分析
查看>>
html和jsp的区别
查看>>
Unity协程实际作用
查看>>
php rsa 加密、解密、签名、验签
查看>>
9.18号
查看>>
Python 3基础教程4-变量
查看>>
vue_extend_component
查看>>
AJAX传递数组
查看>>
I/O系统(二)
查看>>
centos7 安装mysql
查看>>
HDU3572:Task Schedule【最大流】
查看>>
FZU 2020 :组合 【lucas】
查看>>
发布我制作的jQuery贪吃蛇游戏
查看>>
.net操作AD域
查看>>
hash算法
查看>>
ashx.cs 读写session
查看>>