2013-05-10 39 views
1

我看到解決這個問題: Saving as jpeg from memorystream in c#怎樣的MemoryStream在Windows 8中保存爲JPEG C#

,但它不能在WinRT的工作。 有沒有一種簡單的方法使用FileSavePicker將MemoryStream保存爲JPEG格式?

我想:

private async void Save_Image(MemoryStream image) 
{ 
// Launch file picker 
    FileSavePicker picker = new FileSavePicker(); 
    picker.FileTypeChoices.Add("JPeg", new List<string>() { ".jpg", ".jpeg" }); 
    StorageFile file = await picker.PickSaveFileAsync(); 

    if (file == null) 
     return; 

    Stream x = await file.OpenStreamForWriteAsync(); 
    image.WriteTo(x) 
} 

但保存空白文件。可能是我做錯了什麼。

試了一個多方法,但再次空白圖像:

private async void Save_Image(MemoryStream image) 
    { 
     // Launch file picker 
     FileSavePicker picker = new FileSavePicker(); 
     picker.FileTypeChoices.Add("JPeg", new List<string>() { ".jpg", ".jpeg" }); 
     StorageFile file = await picker.PickSaveFileAsync();    

     if (file == null) 
      return; 

     int end = (int)image.Length; 
     byte[] buffer = new byte[end];       
     await image.ReadAsync(buffer, 0, end); 
     await FileIO.WriteBytesAsync(file, buffer); 
    } 
+3

從哪裏得到'image'? – user7116 2013-05-10 17:42:11

+0

哦,對不起,錯過了幾個最初的路線。這裏我們去: '私人異步無效Save_Image(MemoryStream圖像){' – 2013-05-10 21:32:45

+0

爲什麼你使用MemoryStream的圖像字節?如果你的意圖是創建一個圖像或修改和現有的圖像,你可能會更好地與WriteableBitmap類一起服務。 – 2013-05-11 20:13:06

回答

3

明白了!這是我錯過的尋找位置,也是「使用」。必須將其設置爲0. 以下是代碼:

private async void Save_Image(MemoryStream image) 
    { 
     // Launch file picker 
     FileSavePicker picker = new FileSavePicker(); 
     picker.FileTypeChoices.Add("JPeg", new List<string>() { ".jpg", ".jpeg" }); 
     StorageFile file = await picker.PickSaveFileAsync();    

     if (file == null) 
      return; 
     using (Stream x = await file.OpenStreamForWriteAsync()) 
     { 
      x.Seek(0, SeekOrigin.Begin); 
      image.WriteTo(x); 
     } 

    } 
相關問題