C#WPF将图像绑定到字节数组/ sqlite BLOB [英] C# WPF bind image to byte array / sqlite BLOB

查看:199
本文介绍了C#WPF将图像绑定到字节数组/ sqlite BLOB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个联系簿应用程序,使用C#WPF,MVVM,SQLITE& DAPPER。

问题:当我尝试将联系人图片与我的WPF用户控件中的图像元素绑定时,图像不会显示。



绑定到wpf元素的其他Contact属性似乎有效(联系人姓名,详细信息等)。

联系人图片的字节数组初始化(我已手动将一些测试联系人和图像添加到表中使用DB浏览器进行SQLITE),但图像元素不显示它。





我做错了什么?



我尝试过:



联系型号:

I am trying to create a "Contact book" app, using C# WPF, MVVM, SQLITE & DAPPER.
Issue: when i try to bind the Contact picture with an image element in my WPF user control the image is not displayed.

The other Contact properties bound to wpf elements seem to work(Contact name, details etc).
The byte array for the contact Picture gets initialized(i have manually added some test contacts and images to the table with DB Browser for SQLITE), but the image element doesn't display it.


What am i doing wrong?

What I have tried:

Contact Model:

public class Contact
{
    public int Id { get; set; }

    public string FullName { get; set; }

    public byte[] Picture { get; set; }

    public string Information { get; set; }

    public string Phone { get; set; }

    public string WhatsApp { get; set; }

    public string Skype { get; set; }
}







XAML:






XAML:

<UserControl.Resources>
    <Converter:ByteArrayToBitmapImageConverter x:Name="binaryConverter" x:Key="byteToImageConverter"/>
</UserControl.Resources>







<Grid Margin="5"  Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="4" Grid.RowSpan="4" Background="DarkGoldenrod">
           <Image  Source="{Binding SelectedContact.Picture, Converter={StaticResource byteToImageConverter}}" />
       </Grid>





转换器:



Converter:

public class ByteArrayToBitmapImageConverter : IValueConverter
  {
      public BitmapImage ConvertByteArrayToBitMapImage(byte[] imageByteArray)
      {
          BitmapImage img = new BitmapImage();
          using (MemoryStream memStream = new MemoryStream(imageByteArray))
          {
              img.StreamSource = memStream;
          }
          return img;
      }



      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
          BitmapImage img = new BitmapImage();
          if (value != null)
          {
              img = this.ConvertByteArrayToBitMapImage(value as byte[]);
          }
          return img;
      }

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

推荐答案

您在图像尝试之前处理了流阅读它。



将您的转换器更改为:

You're disposing of the stream before the image tries to read it.

Change your converter to:
public class ByteArrayToBitmapImageConverter : IValueConverter
{
    public static BitmapImage ConvertByteArrayToBitMapImage(byte[] imageByteArray)
    {
        BitmapImage img = new BitmapImage();
        img.StreamSource = new MemoryStream(imageByteArray);
        return img;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var imageByteArray = value as byte[];
        if (imageByteArray == null) return null;
        return ConvertByteArrayToBitMapImage(imageByteArray);
    }

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


这篇关于C#WPF将图像绑定到字节数组/ sqlite BLOB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆