在 WPF 中显示数据 URL
Display data URL in WPF
我正在尝试创建从服务获取数据的 WPF 应用程序。数据是图像URLs。有时服务 returns Data URLs.
如果我尝试将 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}}" />
我正在尝试创建从服务获取数据的 WPF 应用程序。数据是图像URLs。有时服务 returns Data URLs.
如果我尝试将 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}}" />