2012-11-23 42 views
3

如何在windows 8中加載bitmapImagebase64String從base64String加載bitmapImage

我試過這個,但我不成功。它曾經在Windows手機上工作。有什麼不同嗎?

看起來像我必須使用函數setsourceasync。當我使用它時,我需要將參數作爲IRandomMemory傳遞,這是我無法做到的。這個怎麼做?

public static BitmapImage Base64ToImage(string base64String) 
    { 
     var bitmapImage = new BitmapImage(); 
     try 
     { 
      if (!String.IsNullOrEmpty(base64String)) 
      { 
       var imageBytes = Convert.FromBase64String(base64String); 
       using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length)) 
       { 
        bitmapImage.SetSourcec(ms); 
        return bitmapImage; 
       } 
      } 
     } 
     catch (Exception e) 
     { 

     } 

     return null; 
    } 
+0

Windows 8城域應用程序可以用幾種編程語言編程。你在使用哪一個? – Philipp

+0

c#抱歉忘了提及 –

+0

你爲什麼「不成功」? – usr

回答

5

要創建的SetSource方法的IRandomAccessStream對象,你需要使用一個DataWriter。看看這個代碼:

public async Task<BitmapImage> GetImage(string value) 
    { 
     if (value == null) 
      return null; 

     var buffer = System.Convert.FromBase64String(value); 
     using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream()) 
     { 
      using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0))) 
      { 
       writer.WriteBytes(buffer); 
       await writer.StoreAsync(); 
      } 

      var image = new BitmapImage(); 
      image.SetSource(ms); 
      return image; 
     } 
    } 
+0

它工作的很好.. thnks :) –

+0

它沒有爲我工作。可能我的'byte []'源是不正確的。你有沒有從'BitmapImage'轉換到'Base64'的方法? –

0

這裏的System.Drawing.Bitmap和System.Windows.Media.BitmapSource的轉換方法。

享受

備註:在Win8中沒有測試但沒有理由不應該工作。

string ToBase64(Bitmap bitmap) 
    { 
     if (bitmap == null) 
      throw new ArgumentNullException("bitmap"); 

     using (var stream = new MemoryStream()) 
     { 
      bitmap.Save(stream, ImageFormat.Png); 

      return Convert.ToBase64String(stream.ToArray()); 
     } 
    } 

    string ToBase64(BitmapSource bitmapSource) 
    { 
     using (var stream = new MemoryStream()) 
     { 
      var encoder = new PngBitmapEncoder(); 
      encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); 
      encoder.Save(stream); 
      return Convert.ToBase64String(stream.ToArray()); 
     } 
    } 

    Bitmap FromBase64(string value) 
    { 
     if (value == null) 
      throw new ArgumentNullException("value"); 

     using (var stream = new MemoryStream(Convert.FromBase64String(value))) 
     { 
      return (Bitmap)Image.FromStream(stream); 
     } 
    } 

    BitmapSource BitmapSourceFromBase64(string value) 
    { 
     if (value == null) 
      throw new ArgumentNullException("value"); 

     using (var stream = new MemoryStream(Convert.FromBase64String(value))) 
     { 
      var decoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); 
      BitmapSource result = decoder.Frames[0]; 
      result.Freeze(); 
      return result; 
     } 
    } 
+0

不適用於Windows 8,Windows 8遵循.Net4.5,可能有些功能不存在。請再次檢查您的答案。等待正確的:( –

+0

'System.Drawing'和'System.Windows.Media'不適用於Windows應用商店應用 – yms