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

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD