windows phone 使用相机并获取图片(3)

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

使用相机需要引用如下命名空间

using Microsoft.Phone.Tasks;

 在这个案例中我们还用到了BitmapImage类,所以我们需要引用命名空间

using System.Windows.Media.Imaging;

 效果图如下

 

 MainPage.xaml文件在初始化的基础上添加了两个元素

<TextBlock x:Name= " txtName " Text= " 启动相机 " Grid.Row= " 1 " ></TextBlock>
        <Image x:Name= " img " Grid.Row= " 1 " Margin= " 12,10,12,0 " ></Image>

 代码隐藏文件

 

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
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 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,得到的文件名为该图片的完整路径

 

 

 

 

目录
相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1249 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
133 0
Windows Phone快速入门需掌握哪些能力
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
162 0
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
230 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
Windows 数据安全/隐私保护 C#