2012-11-23 33 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