如何从字符串数据中设置wpf图像源?

时间:2015-05-20 09:29:02

标签: wpf

我在[Image] mytable的{​​{1}}列的cs代码中有一个字符串值,类型为mydatabase,现在想要将值设置为Image控件的来源。

我编写了这段代码,但未将图片设置为源代码:

varbinary(Max)

在构造函数中:

string strImage = "0xFFD8FFE000104A46494600010....."

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

在Xaml中:

var bytes = GetBytes(strImage);
var myImage = new MyImageModel {Content = bytes};
MyImg.DataContext = myImage;
  

上述代码不起作用,也不是错误。

2 个答案:

答案 0 :(得分:0)

您可以使用converter并将byte字符串绑定到图片的Source属性。 (所以内容是你的字节字符串)

<converters:BytesToImageConverter x:Key="BytesToImageConverter" />
<Image x:Name="MyImg" Source="{Binding Path=Content, Converter={StaticResource BytesToImageConverter}}"/>     

转换器代码:

   public class BytesToImageConverter : IValueConverter
   {
       public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
       {
           if (value == null)
               return null;

           if (!(value is byte[]))
               throw new ArgumentException("Only byte[] values are supported.");

           if (((byte[])value).Length == 0)
               return null;

           // return new ImageSourceConverter().ConvertFrom(value);
           BitmapImage image = new BitmapImage();
           using (MemoryStream ms = new MemoryStream((byte[])value))
           {
               ms.Position = 0;
               image.BeginInit();
               image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
               image.CacheOption = BitmapCacheOption.OnLoad;
               image.UriSource = null;
               image.StreamSource = ms;
               image.EndInit();
           }
           image.Freeze();

           return image;
       }

       public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
       {
           return value;
       }
   }

答案 1 :(得分:-1)

将字符串代码转换为图像文件使用转换像这样

public BitmapImage Base64ToImage( byte[] byteArray)
{
  byteArray;  // your bytes
                        BitmapImage img = new BitmapImage();
                        using (MemoryStream stream = new MemoryStream(byteArray))
                        {
                            img.BeginInit();
                            img.StreamSource = stream;
                            img.CacheOption = BitmapCacheOption.OnLoad;
                            img.EndInit();
                            img.Freeze();
                        }
                       return img;
}

它会为您提供一个可以直接将此图像绑定到UI的图像