zoukankan      html  css  js  c++  java
  • windows phone 获取手机图片库中图片(4)

    前置条件:手机和电脑未连接或连接电脑Zune软件关闭(与Zune软件连接时不允许访问图片库); 版本7.1

    获取手机图片库图片的两种方式: PhotChooserTask方式和XNA方式进行获取

       PhotChooserTask获取

    引用命名空间

    //引用
    //PhotoChooserTask类用到
    using Microsoft.Phone.Tasks;
    //BitmapImage类用到
    using System.Windows.Media.Imaging;

       隐藏文件代码:

    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;
    //引用
    //PhotoChooserTask类用到
    using Microsoft.Phone.Tasks;
    //BitmapImage类用到
    using System.Windows.Media.Imaging;

    namespace ChoosePhoto
    {
        public partial class MainPage : PhoneApplicationPage
        {
            //实例化图片选择器
            PhotoChooserTask photoChoose = new PhotoChooserTask();
            // 构造函数
            public MainPage()
            {
                InitializeComponent();
                //设置的委托事件
                photoChoose.Completed += new EventHandler<PhotoResult>(photoChoose_Completed);
            }
            //事件处理完得到图片
            void photoChoose_Completed(object sender, PhotoResult e)
            {
                if (e.TaskResult==TaskResult.OK)
                {
                    //实例化位图
                    BitmapImage bi = new BitmapImage();
                    //设置位图源
                    bi.SetSource(e.ChosenPhoto);
                    //设置元素位图
                    img.Source = bi;
                    txtName.Content = e.OriginalFileName;
                    
                }
            }
            /// <summary>
            
    /// button事件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void txtName_Click(object sender, RoutedEventArgs e)
            {
                //打开图片库
                photoChoose.Show();
                //知识点①
                
    //是否显示拍照按钮
                photoChoose.ShowCamera = true;
                //知识点②
                
    //设置剪切区域的宽度
                photoChoose.PixelWidth = 50;
                //设置剪切区域的高度
                photoChoose.PixelHeight = 100;
            }
        }
    }

      知识点①:PhotoChooserTask类的属性,该属性表示是否显示启动相机按钮,一般显示比较好,增加图片来源途径

     

      知识点②:通俗的讲应该是设置或者获取截取区域的高度和宽度

     

      小结: 有裁剪功能是一大特色

       XNA方式获取

    引用命名空间

    //引用XNA库
    using Microsoft.Xna.Framework.Media;
    //BitmapImage类用到
    using System.Windows.Media.Imaging;

    MediaLibrary应该可以译为媒体库,它包含了影音,图片,是所有媒体的集合

    隐藏文件代码:

    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;
    //引用XNA库
    using Microsoft.Xna.Framework.Media;
    //BitmapImage类用到
    using System.Windows.Media.Imaging;

    namespace XNAChoosePhoto
    {
        public partial class MainPage : PhoneApplicationPage
        {
            
            //知识点①
            MediaLibrary mediaL = new MediaLibrary();
            // 构造函数
            public MainPage()
            {
                InitializeComponent();
                //获得图片的方法
                GetPic();
            }
            /// <summary>
            
    /// 获得一张图片
            
    /// </summary>
            void GetPic()
            {
                //获得媒体库中所有的图片
                PictureCollection pic = mediaL.Pictures;
                if (pic.Count>1)
                {
                    BitmapImage bi = new BitmapImage();
                    //知识点②
                    Picture pc=pic[0];
                    bi.SetSource(pc.GetImage());
                    img.Source = bi;
                    txtName.Text = "图片名称:" + pc.Name + ";\n该图片相集名称:" + pc.Album.Name + ";\n获取照片摄制时间" + pc.Date;
                }
            }
        }
    }

     知识点①:MediaLibrary是个很有用的类,比如你可以获得里面的歌曲

     

    View Code
      MediaLibrary mediaL = new MediaLibrary();
                SongCollection sc = mediaL.Songs;
                if (sc.Count > 1)
                {
                    Song s = sc[0];
                    MediaPlayer.Play(s);
                }

      知识点②:Picture类的一些属性或者方法会用得到,比如当前图片所在的相集,相集下是否还会包含相集,以及相集的名称,时间等

     小结:整体的思路是从集合中逐级剥离,媒体库(影音,图片)-------》图片集合------》图片-----》图片相关属性;之前忘记从哪个博主那里看到如果用到XNA中的类,在提交应用的时候不能通过

    运行后的效果图:

     

  • 相关阅读:
    笔记:Oracle SQL 高级编程 第2章 SQL 执行
    python 中的 filter, lambda, map, reduce 内置函数
    笔记:Oracle SQL 高级编程 第1章 SQL 核心
    java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
    使用JDBC进行批处理
    程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
    教你如何迅速秒杀掉:99%的海量数据处理面试题
    十道海量数据处理面试题与十个方法大总结
    《Java 7 并发编程指南》学习概要 (7) 定制并发类
    HashMap多线程并发问题分析
  • 原文地址:https://www.cnblogs.com/shenzhoulong/p/2438224.html
Copyright © 2011-2022 走看看