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


    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>

     代码隐藏文件

    View Code
     1 View Code using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Net;
     5 using System.Windows;
     6 using System.Windows.Controls;
     7 using System.Windows.Documents;
     8 using System.Windows.Input;
     9 using System.Windows.Media;
    10 using System.Windows.Media.Animation;
    11 using System.Windows.Shapes;
    12 using Microsoft.Phone.Controls;
    13 //引用
    14 using System.Windows.Media.Imaging;
    15 using Microsoft.Phone.Tasks;
    16 
    17 namespace CameraShoot
    18 {
    19     public partial class MainPage : PhoneApplicationPage
    20     {
    21         //相机捕获任务实例
    22         CameraCaptureTask cameraCT = new CameraCaptureTask();
    23         // 构造函数
    24         public MainPage()
    25         {
    26             InitializeComponent();
    27             //手机拍照功能完成后调用
    28             cameraCT.Completed += new EventHandler<PhotoResult>(cameraCT_Completed);
    29         }
    30         //重写触摸屏事件
    31         protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
    32         {
    33             //知识点①
    34             if (e.OriginalSource==txtName)
    35             {
    36                 //调用相机
    37                 cameraCT.Show();
    38             }
    39             //知识点②
    40             //触摸事件完成 
    41             e.Complete();
    42             //知识点③
    43             //不在向父元素传递
    44             e.Handled = true;
    45             //知识点④
    46             base.OnManipulationStarted(e);
    47         }
    48         //完成
    49         void cameraCT_Completed(object sender, PhotoResult e)
    50         {
    51             if (e.TaskResult==TaskResult.OK)
    52             {
    53                 BitmapImage bmp = new BitmapImage();
    54                 //知识点⑤
    55                 //获取包含文件流的和Source不同
    56                 bmp.SetSource(e.ChosenPhoto);
    57                 //设置图片源
    58                 img.Source = bmp;
    59                 txtName.Text = e.OriginalFileName;
    60             }
    61         }
    62     }
    63 }

    其中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,得到的文件名为该图片的完整路径

     

    作者:神舟龙
        
     

    新建的wp開發者群:42182428 

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    在HQL里使用set方式设置的变量
    Nuxt.js 使用vue-social-share.js 插件 分享功能实践
    渗透测试被动信息搜集工具v0.1
    burp工具tips集合
    Go语言之数据类型(二)
    Go语言之数据类型(一)
    Go语言之变量
    Go语言快速入门
    Go语言环境搭建
    [SSH]基础知识——SSH、对称加密、非对称加密、公钥、私钥、中间人攻击
  • 原文地址:https://www.cnblogs.com/zhanghaifeng/p/2482718.html
Copyright © 2020-2023  润新知