在WPF中显示数据的URL
问题描述:
我正在尝试创建从服务中获取数据的WPF应用程序。数据是图片网址。有时服务返回Data URLs。在WPF中显示数据的URL
如果我试图到该网址绑定到图像控制,如:
<Image Source="{Binding URL}" />
它的工作进行定期的URL,但不显示数据的URL。
有没有什么办法可以在WPF控件中显示数据URL?
答
创建一个值转换器,它的base64数据转换为BitmapImage
:
public class DataUrlConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var data = (string) value;
var base64Data = Regex.Match(data, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
var binData = System.Convert.FromBase64String(base64Data);
var image = new BitmapImage();
using (var mem = new MemoryStream(binData))
{
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = mem;
image.EndInit();
}
image.Freeze();
return image;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后创建一个转换器资源:
<Window.Resources>
<local:DataUrlConverter x:Key="DataUrlConverter"></local:DataUrlConverter>
</Window.Resources>
,并使用它像这样:
<Image Source="{Binding URL, Converter={StaticResource DataUrlConverter}}" />
你可以创建一个值转换器来解释数据url并将其转换为图像可以读取的流 – Nkosi
你能告诉我一个如何做的例子吗? – nrofis