windows phone 使用相机并获取图片(3)
使用相机需要引用如下命名空间
using Microsoft.Phone.Tasks;
在这个案例中我们还用到了BitmapImage类,所以我们需要引用命名空间
using System.Windows.Media.Imaging;
效果图如下

MainPage.xaml文件在初始化的基础上添加了两个元素
<TextBlock x:Name="txtName" Text="启动相机" Grid.Row="" ></TextBlock> <Image x:Name="img" Grid.Row="" Margin="12,10,12,0" ></Image>
代码隐藏文件

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 System.Windows.Media.Imaging;
using Microsoft.Phone.Tasks;
namespace CameraShoot
{
public partial class MainPage : PhoneApplicationPage
{
//相机捕获任务实例
CameraCaptureTask cameraCT = new CameraCaptureTask();
// 构造函数
public MainPage()
{
InitializeComponent();
//手机拍照功能完成后调用
cameraCT.Completed += new EventHandler<PhotoResult>(cameraCT_Completed);
}
//重写触摸屏事件
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
{
//知识点①
if (e.OriginalSource==txtName)
{
//调用相机
cameraCT.Show();
}
//知识点②
//触摸事件完成
e.Complete();
//知识点③
//不在向父元素传递
e.Handled = true;
//知识点④
base.OnManipulationStarted(e);
}
//完成
void cameraCT_Completed(object sender, PhotoResult e)
{
if (e.TaskResult==TaskResult.OK)
{
BitmapImage bmp = new BitmapImage();
//知识点⑤
//获取包含文件流的和Source不同
bmp.SetSource(e.ChosenPhoto);
//设置图片源
img.Source = bmp;
txtName.Text = e.OriginalFileName;
}
}
}
}
其中CameraCaptureTask,有两个比较实用的方法,也就是我们这里用到的
Show; 调用相机功能
Completed ;相机拍摄完成之后可被调用
知识点①:该事件中的e是指,通过该事件传递过来的参数,所以我们可以从中获取一些信息,属性OriginalSource表示产生该事件的元素(在windows phone 中都称之为元素而非控件);
知识点②:这里调用了Completed方法,加上该方法之后,系统就不会处理相应的路由事件了,这里是指重写的OnManipulationStarted事件 ;
知识点③: e.Handled = true; 该属性设置表示该路由事件已经处理完毕,不需要在向可视化树的上一层传递;
知识点④:调用本方法的基类方法,虽然在这里重写了基类方法,但是不可避免的在基类完成的基础性操作,重写没有完成,这样操作会出现一些错误
知识点⑤:利用SetSource设置的源一定是Stream流,wp支持png和jpeg格式
这些都是在模拟器上的的操作,如果在真机上测试,请在测试前关闭ZUNE,也可移步 http://www.cnblogs.com/fwind/archive/2011/11/28/2265890.html
总结:使用相机是直接调用CameraCaptureTask类的show方法,这样相机就打开了,直到图片生成,再调用Completed方法,在Completed方法中获得 PhotoResult中该图片的stream 并作为位图的源,并设置image的源;当前图片的文件名也就是PhotoResult的属性OriginalFileName,得到的文件名为该图片的完整路径

windows phone 使用相机并获取图片(3)的更多相关文章
- android调用系统相机并获取图片
如果不是特别的要求,通过拍照的方式取得图片的话,我们一般调用系统的拍照来完成这项工作,而没必要再自己去实现一个拍照功能.调用系统相机很简单,只需要一个intent就可以跳转到相几界面,然后再通过onA ...
- 关于相机拍照获取图片onActivityResult返回data 为null的问题
调用相机拍摄方法 /** * capture new image */ protected void selectPicFromCamera() { if (!EaseCommonUtils.isSd ...
- Windows服务器从Linux服务器上以FTP形式获取图片
Windows服务器上运行一个获取图片的程序,获取图片采用的是FTP方式: 准备条件: Linux服务器上创建一个FTP的用户:ftppic 这个账号要有权限才可以,然后编写Windows端代码: p ...
- Android相机、相册获取图片显示并保存到SD卡
Android相机.相册获取图片显示并保存到SD卡 [复制链接] 电梯直达 楼主 发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图 本帖最后由 happy小妖同学 ...
- iOS 从相机或相册获取图片并裁剪
今天遇到一个用户头像上传的问题,需要从相册或者相机中读取图片.代码很简单,抽取关键部分,如下: //load user image - (void)UesrImageClicked { UIActio ...
- Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切
效果:注意:1:网络权限<;;;); intent.putExtra(); ); intent.putExtra(); intent.putExtra(, byteArrayOutputStre ...
- Android中调用系统的相机和图库获取图片
//--------我的主布局文件------很简单---------------------------------<LinearLayout xmlns:android="http ...
- [转]微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
本文转自:http://blog.csdn.net/qq_31383345/article/details/53014610 今天遇到微信小程序的用户头像设置功能,做笔记. 先上gif: 再上代码: ...
- [Xcode 实际操作]九、实用进阶-(13)调用相机并获取拍摄后的图片
目录:[Swift]Xcode实际操作 本文将演示如何调用相机并获取拍摄后的图片. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首 ...
随机推荐
- 在屏幕上建立ALV
在屏幕上创建两个文本元素空件.一个推出按钮控件.一个定制控制按钮 代码所示: *&------------------------------------------------------- ...
- Lucene.Net 2.3.1开发介绍 —— 二、分词(三)
原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(三) 1.3 分词器结构 1.3.1 分词器整体结构 从1.2节的分析,终于做到了管中窥豹,现在在Lucene.Net项目中添加一个类关 ...
- 【Demo 0006】iOS常用控件
本章学习要点 1. 了解iOS中控件继承关系: 2. 掌握UIControl基础知识; 3. 掌握UIButton基本用法: 4. 掌握UILa ...
- vs2008编译QT开源项目--太阳神三国杀源码分析(三) 皮肤
太阳神三国杀的界面很绚丽,界面上按钮的图标,鼠标移入移出时图标的变化,日志和聊天Widget的边框和半透明等效果,既可以通过代码来控制,也可以使用皮肤文件qss进行控制.下面我们分析一下三国杀的qss ...
- haproxy 看到的是https,后台是http的原因
https://www.zjtest6.com/admin/api/menu haproxy 日志: Jun 24 13:23:02 localhost haproxy[23205]: 192.168 ...
- 引用类中的enum
引用类中的enum 引用类中的enum,需要加类的域class_name::value_in_enum_name 点击(此处)折叠或打开 #include <stdio.h> #inclu ...
- hdu2159 Fate 二维背包
#include <cstring> #include <string> #include <cstdio> #include <cmath> #inc ...
- 【MySQL案例】HA: GTID_MODE配置不一致
1.1.1. HA: GTID_MODE配置不一致 [环境描写叙述] msyql5.6.14 [报错信息] 初始状态Master和Slave都开启了enforce-gtid-consistency和g ...
- 辛星跟您玩转vim第一节之vim的下载与三种模式
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...
- WM_SYSCOMMAND消息命令整理 good
注意:1. 使用WM_SYSCOMMAND时,鼠标的一些消息可能会受到影响,比如不能响应MouseUp事件,可以在窗口中捕获WM_SYSCOMMAND消息,并判断消息的CommandType来判断消息 ...