2014-02-04 4 views
1

У меня есть требование сохранить 5 последних снимков из альбома «Сохраненные фотографии» из MediaLibrary в IsolatedStorage. Я не совсем уверен, что лучший способ выполнить эту задачу. Пока я просматриваю MediaLibrary для альбома «Saved Pictures». Если альбом существует и изображения существуют в этом альбоме, мне нужно взять последние 5 изображений, начинающихся с имени файла TestApp, и сохранить их в IsolStorage. Имена будут использоваться для обновления плитки, поэтому путь к файлу каждого изображения очень специфичен. То, что я до сих пор выглядит следующим образом, я JUS tnot уверен, как сохранить p.GetImage() (который возвращает изображение из MediaLibrary типа System.IO.Stream) в IsolatedStorage с обновленным именем файлаКак сохранить изображения из MediaLibrary в IsolatedStorage

private PictureCollection _pictures = null; 

    public void StoreCycleTileImages() 
    { 
     string _photoPath = @"\Shared\ShellContent"; 
     string _photoFilename = null; 
     int i = 0; 

     using (MediaLibrary library = new MediaLibrary()) 
     { 
      foreach (PictureAlbum album in library.RootPictureAlbum.Albums) 
      { 
       if (album.Name == "Saved Pictures") 
       { 
        _pictures = album.Pictures; 

        if(_pictures != null) 
        { 
         //search for the most recent pictures in the album with the correct file name 
         foreach (var p in _pictures.Reverse()) 
         { 
          if (i >= 5) 
           return; 

          if (p.Name.Substring(0,7) == "TestApp") 
          { 
           i += 1; 

           using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) 
           { 
            if (!storage.DirectoryExists(_photoPath)) 
            { 
             storage.CreateDirectory(_photoPath); 
            } 

            //Update file name 
            _photoFilename = @"" + i.ToString(); 

            if (storage.FileExists(_photoPath + @"\" + _photoFilename)) 
            { 
             storage.DeleteFile(_photoPath + @"\" + _photoFilename); 
            } 

            //use p.GetImage() stream to save to IsolatedStorage with updated file name 
            //?? 
           } 
          } 
         }        
        } 

        break; 
       } 
      } 
     } 
    } 

ответ

0

Я запустить свой код - вы пропустите расширение файла при создании имени файла (вы должны учитывать, что это может быть jpg, png или другое изображение). Мой рабочий код (копирующий фрагмент) выглядит так:

photoFilename = @"" + i.ToString() + p.Name.Substring(p.Name.LastIndexOf('.')); 
if (storage.FileExists(_photoPath + @"\" + _photoFilename)) 
{ 
    storage.DeleteFile(_photoPath + @"\" + _photoFilename); 
} 
using (IsolatedStorageFileStream file = storage.CreateFile(_photoPath + @"\" + _photoFilename)) 
    p.GetImage().CopyTo(file);