0%

WPF Image控件下对于Base64的转化显示 - 樱花落舞 - 博客园

Excerpt

算作前言 本文对图片如何转化成base64不做描述,我们可以从很多途径了解到转化办法。却很少有博客提到怎么在WPF的Image控件中显示图片。 对于base64的合法性 随便拿一张图片转一下试一试: 额。好长….取前面一部分吧 data:image/png;base64,iVBORw0KGgoA


算作前言

本文对图片如何转化成base64不做描述,我们可以从很多途径了解到转化办法。却很少有博客提到怎么在WPF的Image控件中显示图片。

随便拿一张图片转一下试一试:

额。好长….取前面一部分吧

1
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAA9CAMAAADlJaswAAAAe1BMVE.....

C#对于这段数据,通常的做法是:

1
2
3
4
5
6
7
8
<span>try</span><span>
{
</span><span>byte</span>[] streamBase =<span> Convert.FromBase64String(base64);
}
</span><span>catch</span><span>(Exception ex)
{
Console.WriteLine(ex.Message);
}</span>

抛出了异常:

1
输入的不是有效的 Base-<span>64</span> 字符串,因为它包含非 Base-<span>64</span> 字符、两个以上的填充字符,或者填充字符间包含非法字符。

明明是正常转化得来的,为什么却是不合法的字符串?其实这里还需要一点处理,就算把头部信息去掉!

1
2
<span>//</span><span>base64 = base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");</span><span>//</span><span>将base64头部信息替换</span>
<span>string</span> imagebase64 = base64.Substring(base64.IndexOf(<span>"</span><span>,</span><span>"</span>) + <span>1</span>);

这样就可以成功转化了。现在来看怎么显示在Image里面。

WPF中Image显示

 答案:https://stackoverflow.com/questions/593388/how-do-i-read-a-base64-image-in-wpf

1
2
3
4
5
6
7
<span>string</span> imagebase64 = base64.Substring(base64.IndexOf(<span>"</span><span>,</span><span>"</span>) + <span>1</span><span>);
</span><span>byte</span>[] streamBase =<span> Convert.FromBase64String(imagebase64);
BitmapImage bi </span>= <span>new</span><span> BitmapImage();
bi.BeginInit();
bi.StreamSource </span>= <span>new</span><span> MemoryStream(streamBase);
bi.EndInit();
Image.Source </span>= bi;

没啥太花里胡哨的东西。

__EOF__