在图像控件中显示DB中的图像

时间:2014-06-23 15:24:54

标签: wpf image

我已经在参数类型图像中保存了数据库中的图像,并且我已经完成了以下操作:

private void btnAceptar_Click(object sender, RoutedEventArgs e)
    {
        UsuariosBLL bll = new UsuariosBLL();
        UsuariosBO user = new UsuariosBO();
        PerfilBO perfil = cmbperf.SelectedItem as PerfilBO;

        //........            
        user.Imagen = ConvertImageToByteArray(ruta);
        bll.InsertarFilaUsuarios(user);
        MessageBox.Show("Se insertó");
        //.......
    }

其中ConvertToByteArray方法转换在字节数组中选择的图像

public byte[] ConvertImageToByteArray(string path)
    {
        byte[] ImageByte=null;

        try
        {
            FileStream fs = new FileStream(path,FileMode.Open,FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            ImageByte = br.ReadBytes((int)fs.Length);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }
        return ImageByte;
    }

现在我只是想在我的组合框中选择一个不同的用户来检索图像。 我试过这样的事:

private void cmbUsuarios_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        UsuariosBO user = e.AddedItems[0] as UsuariosBO;
       //.....
        MemoryStream ms = new MemoryStream(user.Imagen);
        System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
        imgFoto = img;
        usuario = user;
    }

但是出生的错误:

无法将类型'System.Drawing.Image'隐式转换为'System.Windows.Controls.Image'

我明白这意味着但我不知道如何解决它......

谢谢!!

1 个答案:

答案 0 :(得分:0)

您应该创建一个WPF System.Drawing.Image并将其分配给ImageControl的ImageSource属性,而不是从字节流中创建Source

执行此操作的一种方法是创建BitmapImage

using (var ms = new MemoryStream(user.Imagen))
{
    var img = new BitmapImage();
    img.BeginInit();
    img.CacheOption = BitmapCacheOption.OnLoad;
    img.StreamSource = ms;
    img.EndInit();
    imgFoto.Source = img;
}

或者BitmapFrame

using (var ms = new MemoryStream(user.Imagen))
{
    imgFoto.Source = BitmapFrame.Create(ms,
        BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}