Отображение изображения из базы данных в элементе управления изображением

#wpf #image

#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.Рисование.Изображение «в» систему.Windows.Элементы управления.Изображение ‘

Я понимаю, что это значит, но я не знаю, как это исправить…

Спасибо!!

Комментарии:

1. если это WPF, пожалуйста, удалите весь свой код и используйте правильную привязку данных. кроме того, удалите System.Drawing материал, WPF об этом не заботится.

2. В качестве дополнительного комментария, пожалуйста, кодируйте строго на английском языке. Я говорю по-испански, как и вы, хотя 100% моего кода строго на английском. Люди понятия не имеют, что btnAceptar это значит, и не должны.

Ответ №1:

Вместо создания a System.Drawing.Image из потока байтов вы должны создать WPF ImageSource и присвоить его Source свойству вашего ImageControl.

Один из способов сделать это — создать 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);
}