#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);
}