将System.Drawing.Bitmap转换为WPF的System.Windows.Media.BitmapImage

时间:2015-04-21 09:05:41

标签: c# wpf bitmap bitmapimage imagesource

我收到的位图是Base64编码的字符串。我成功地将其转换为System.Drawing.Bitmap并将其显示在图片框中的测试winforms上。图像显示没有问题。

然而,当我尝试将其转换为BitmapImage时,我得到了一个

  

Metadata ='image.Metadata'引发了类型异常   的 'System.NotSupportedException'

以下是用于进行初始转换和转换为BitmapImage的代码。 BitmapImage需要传递给另一个需要System.Windows.Media.ImageSource的方法。

using (MemoryStream BitmapMS = new MemoryStream(Convert.FromBase64String(base64str)))
{                    
    Bitmap bitmap = new Bitmap(BitmapMS);                    
    TestForm test = new TestForm();
    test.pictureBox1.Image = bitmap;
    test.ShowDialog();

    using (MemoryStream BitmapImageMS = new MemoryStream())
    {
        bitmap.Save(BitmapImageMS, ImageFormat.Jpeg);
        BitmapImageMS.Position = 0;
        var image = new BitmapImage();
        image.BeginInit();
        image.CacheOption = BitmapCacheOption.OnLoad;
        image.StreamSource = BitmapImageMS;
        image.EndInit();
        return image;
    }
}

编辑:我还应该提到我试图使用.Net 3.5

1 个答案:

答案 0 :(得分:2)

您应该像这样解码位图:

public static BitmapSource BitmapFromBase64(string base64String)
{
    var bytes = Convert.FromBase64String(base64String);

    using (var stream = new MemoryStream(bytes))
    {
        return BitmapFrame.Create(stream,
            BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
    }
}

BitmapImage相比,BitmapFrame支持Metadata属性。

相关问题