2013-08-19 35 views
0

我想从Windows Phone 8的照片库中获取图像。并且第一次它工作正常。我从相机卷文件夹第一次,但是当我试图从相册中的图片保存的图片抛出内存异常..我不明白为什么会发生这种情况。任何帮助表示赞赏。内存不足的异常..在Windows Phone 8

MediaImage mediaImage = new MediaImage(); 


    BitmapImage image; 
    private void Panorama_SelectionChanged_1(object sender, SelectionChangedEventArgs e) 
    { 
     Panorama obj = sender as Panorama; 
     PanoramaItem objPanoramaItem = (PanoramaItem)obj.SelectedItem; 
     string FolderName = objPanoramaItem.Header.ToString(); 
     PictureAlbum AlbumFolder = allAlbums.Where(album => album.Name == FolderName).FirstOrDefault(); 
     if (FolderName == "Camera Roll") 
     { 
      if (ImageListCameraRoll == null) 
      { 
       ImageListCameraRoll = new ObservableCollection<MediaImage>(); 



       var CameraRollPictures = AlbumFolder.Pictures; 

       foreach (var picture in CameraRollPictures) 
       { 
        mediaImage = new MediaImage(); 
        image = new BitmapImage(); 
        image.SetSource(picture.GetImage()); 
        mediaImage.ImageFile = image; 
        mediaImage.ImageName = picture.Name; 
        ImageListCameraRoll.Add(mediaImage); 
       } 
      } 
      ListboxCameraRoll.ItemsSource = ImageListCameraRoll; 
     } 
     if (FolderName == "Saved Pictures1") 
     { 
      if (ImageListSavedPictures == null) 
      { 
       ImageListSavedPictures = new ObservableCollection<MediaImage>(); 
       var SavedPictures = AlbumFolder.Pictures; 
       foreach (var picture in SavedPictures) 
       { 
        mediaImage = new MediaImage(); 
        image = new BitmapImage(); 
        image.SetSource(picture.GetImage()); 
        mediaImage.ImageFile = image; 
        mediaImage.ImageName = picture.Name; 
        ImageListSavedPictures.Add(mediaImage); 
       } 
      } 
      ListboxSavedPictures.ItemsSource = ImageListSavedPictures; 
     } 
} 

我在这里做的是试图让全景物品更改事件的图片。 Panorama项目基于照片库中的不同文件夹..

+1

对专辑API不是很熟悉,但是在我看来,您似乎将文件夹中所有图像的全分辨率版本加载到内存中。这就是你要做的,因为如果文件夹很大,它可能需要相当多的内存。 –

+0

so thr any other way..like compress or something – loop

+0

你在哪一行出错? –

回答

5

将文件夹中的所有图像加载到内存中可能会占用大量内存空间。除非你真的需要全尺寸的图像,我建议使用GetThumbnail()来代替加载照片的低分辨率版本。一旦用户选择了哪些照片来执行操作,您可以随时返回到原件。

image.SetSource(picture.GetThumbnail()); 
+0

我只是想通过自己..但你的答案是正确的 – loop