Windows Phone 7:<四>使用媒体库访问图片

作者:http://www.cnblogs.com/gaowenbin/ 高文彬

<一>:随机获取MediaLibrary的图片

Windows Phone 7应用程序中使用MediaLibrary,首先我们的添加引用Microsoft.Xna.Framework.Media,Media提供了访问歌曲,播放列表和图片,下面我们将使用媒体API来访问图片

     

  MainPage.xaml内容区,在包含一个Image和TextBlock在Grid

 

 

 

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Image Name="img" />
            
            <TextBlock Name="txtblk"
                       TextWrapping="Wrap"
                       TextAlignment="Center"
                       VerticalAlignment="Bottom" />
        </Grid> 

 MediaLibrary mediaLib = new MediaLibrary(); // 实例化MediaLibrary
  Random rand = new Random();                 // 产生随机数

      PictureCollection类提供访问设备的媒体库中的图片。使用  MediaLibrary.Picture属性来获得该的媒体库中的所有图片的集合,并使PictureAlbum.Pictures 属  性来获得特定图片相册中的图片的集合。

  /// <summary>
        /// 获取图片
        /// </summary>
        public void GetRandomPicture()
        {
            // PictureCollection 类提供访问设备的媒体库中的图片集合
            PictureCollection pictures = mediaLib.Pictures;
            if (pictures.Count > 0)
            {
                // 产生随机数
            int index = rand.Next(pictures.Count);
                Picture pic = pictures[index];

                BitmapImage bmp = new BitmapImage();
                bmp.SetSource(pic.GetImage());
                img.Source = bmp;

                txtblk.Text = String.Format("{0}\n{1}\n{2}", 
                                            pic.Name, pic.Album.Name, pic.Date);
            }
        }
      在GetRandomPicture方法中,通过随机从PictureCollection对象挑选。img对象有一个GetImage方法返回一个stream和一个名称,相册和数据信息将显示在    TextBlock。

<二>:使用MediaLibrary添加图片

  前面发现MediaLibrary中有个SavePicture(),它包含了一个string类型的参数需要保存图片的名称,另外一个是byte[]类型的图片数据。 添加图前,可以对设备进行判断,使用DeviceType判断设备是否是模拟器,DeviceType == DeviceType.Emulator,同时也判断该模拟器是否存在上传的图片。

  图片的名称用List来保存,这样可能有点死板,通过遍历List集合得到的图片名称,然后用组合成Uri,Uri的类型可以是觉得路径和相对路径

 

        public void AddPictures()
        {
            // 使用Using 自动释放资源
            using (MediaLibrary mediaLib = new MediaLibrary())
            {
                // 判断是否已添加图片
                if (Microsoft.Devices.Environment.DeviceType == DeviceType.Emulator && mediaLib.Pictures.Count == 0)
                {
                    // 创建包含图片名称的List集合
                    List<string> myPicList = new List<string>()
                    {
                        "test1.jpg",
                        "test2.jpg",
                    };
                    // 通过遍历集合得到图片的名称
                    foreach (var item in myPicList)
                    {
                        // 组合成正确的Uri
                        Uri myUri = new Uri(string.Format(@"Img/{0}",item),UriKind.Relative);
                        // 获取流
                        using (Stream imgStream = App.GetResourceStream(myUri).Stream)
                        {
                            // 保存图片
                            mediaLib.SavePicture(item,imgStream);
                        }
                    }
                }
            }
        }

 

 

posted @ 2010-11-20 21:26  marr  阅读(782)  评论(0编辑  收藏  举报