2017-05-28 12 views
1

サービスからデータを取得するWPFアプリケーションを作成しようとしています。データは画像のURLです。場合によってはData URLsを返します。WPFでのデータ表示URL

私はImageコントロールにそのURLをバインドしようとした場合のように:

<Image Source="{Binding URL}" /> 

これは、通常のURLのために働いていますが、データのURLが表示されません。

WPFコントロールにデータURLを表示する方法はありますか?

+0

あなたをデータURLを解釈し、画像を読み取ることができるストリームに変換する値コンバータを作成することができます – Nkosi

+0

私はそれを行う方法の例を教えてもらえますか? – nrofis

答えて

1

BitmapImageにbase64でデータを変換した値コンバータを作成します。

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}}" /> 
関連する問題