4

Я создаю миниатюру и показывать в кадре, используя этот кодКак сохранить сохранить миниатюрное изображение в устройстве в окнах 8 метро приложения C#

Platform -> Windows 8 и приложения метро с помощью C#

http://code.msdn.microsoft.com/windowsapps/File-and-folder-thumbnail-1d530e5d

в окнах 8 приложений метро с использованием C#. Мне нужно сохранить или сохранить (в устройстве) миниатюру, которую я создаю во время выполнения. в DisplayResult() файла-файла constants.cs мне нужно сохранить это изображение в устройстве, как это сделать. пожалуйста, дайте мне какую-нибудь идею или пример, я очень новичок в мобильном телефоне и никогда не работал над изображением и миниатюрами. Заранее спасибо .

ответ

8

Попробуйте это. Ниже код будет сохранять выбрал обложку альбома аудио файла в TempFolder

private async void btnPickFile_Click(object sender, RoutedEventArgs e) 
{ 
    string[] Music = new string[] { ".mp3", ".wma", ".m4a", ".aac" }; 
    FileOpenPicker openPicker = new FileOpenPicker(); 
    foreach (string extension in Music) 
    { 
     openPicker.FileTypeFilter.Add(extension); 
    } 

    StorageFile file = await openPicker.PickSingleFileAsync(); 
    if (file != null) 
    { 
     await SaveThumbnail("MySongThumb.png", file); 
    } 
} 

private async Task SaveThumbnail(string ThumbnailName, StorageFile file) 
{ 
    if (file != null) 
    { 
     using (StorageItemThumbnail thumbnail = await file.GetThumbnailAsync(ThumbnailMode.MusicView, 100)) 
     { 
      if (thumbnail != null && thumbnail.Type == ThumbnailType.Image) 
      { 
       var destinationFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(ThumbnailName, CreationCollisionOption.GenerateUniqueName); 
       Windows.Storage.Streams.Buffer MyBuffer = new Windows.Storage.Streams.Buffer(Convert.ToUInt32(thumbnail.Size)); 
       IBuffer iBuf = await thumbnail.ReadAsync(MyBuffer, MyBuffer.Capacity, InputStreamOptions.None); 
       using (var strm = await destinationFile.OpenAsync(FileAccessMode.ReadWrite)) 
       { 
        await strm.WriteAsync(iBuf); 
       } 
      } 
     } 
    } 
} 

UPDATE 1

private async Task<StorageFile> SaveThumbnail(StorageItemThumbnail objThumbnail) 
{ 
    if (objThumbnail != null && objThumbnail.Type == ThumbnailType.Image) 
    { 
     var picker = new FileSavePicker(); 
     picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
     picker.FileTypeChoices.Add("JPEG Image", new string[] { ".jpg" }); 
     picker.FileTypeChoices.Add("PNG Image", new string[] { ".png" }); 
     StorageFile destinationFile = await picker.PickSaveFileAsync(); 

     if (destinationFile != null) 
     { 
      Windows.Storage.Streams.Buffer MyBuffer = new Windows.Storage.Streams.Buffer(Convert.ToUInt32(objThumbnail.Size)); 
      IBuffer iBuf = await objThumbnail.ReadAsync(MyBuffer, MyBuffer.Capacity, InputStreamOptions.None); 
      using (var strm = await destinationFile.OpenAsync(FileAccessMode.ReadWrite)) 
      { 
       await strm.WriteAsync(iBuf); 
      } 
     } 

     return destinationFile; 
    } 
    else 
    { 
     return null; 
    } 
} 
+0

Thanx xyroid, Ваш код помог много, но дело в том, что я не нужно, чтобы выбрать файл снова потому что я создал эскиз этого ранее, я попытался изменить свой код, не используя openPicker, но не добился успеха в этом. можем ли мы использовать StorageFolder вместо StorageFile и savePicker вместо объекта openPicker, я также хочу указать местоположение для сохранения этого значка в том месте, которое я выбрал savePicker. Я много искал, чтобы найти такой вариант, но не стал полезным. – user2716989

+0

Итак, у вас уже есть объект StorageItemThumbnail, и вы хотите сохранить его с помощью 'SavePicker'? – Xyroid

+0

Право вы правы. У меня уже есть объект StorageItemThumbnail и вы хотите сохранить его на устройстве. – user2716989