using Microsoft.Win32; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace CatProject { /// /// Логика взаимодействия для PersonalPage.xaml /// public partial class PersonalPage : Page { /// /// Метод для отображения изображения /// /// байтовый массив /// имя изображения в разметке void showImage(byte[] array, System.Windows.Controls.Image img) { BitmapImage BI = new BitmapImage(); // создаем объект для загрузки картинки BI.BeginInit(); // начинаем считывание BI.StreamSource = new MemoryStream(array); // задаем источник потока BI.EndInit(); // заканчиваем считывание img.Source = BI; // показываем изображение на экране img.Stretch = Stretch.Uniform; } User user = new User(); public PersonalPage(int id) { InitializeComponent(); user = BaseClass.BaseConnect.User.FirstOrDefault(x=>x.id== id); tbSurname.Text = user.Surname; tbName.Text = user.Name; UserPhoto up = BaseClass.BaseConnect.UserPhoto.FirstOrDefault(x => x.id == user.Avatar); // ищем, какая картинка отображается у пользователя в качестве аватара if (up!= null ) { byte[] Bar = up.Photo; showImage(Bar, imUser); } } private void BtnUpdate_Click(object sender, RoutedEventArgs e) // переход на окно для изменения личных данных { WindowNameSurname wns = new WindowNameSurname(user.id); // создаем объект окна wns.ShowDialog(); // открываем окно FrameClass.MainFrame.Navigate(new PersonalPage(user.id)); } private void BtnAddPhoto_Click(object sender, RoutedEventArgs e) // для добавления нового фото и изменения аватара { try { // "длинный" способ для перевода изображения в байтовый массив, более которки способ представлен ниже в следующем обработчике событий UserPhoto photo = new UserPhoto(); // объект для записи в таблицу с фото photo.idUser = user.id; // присваиваем значение полю с id пользователя OpenFileDialog OFD = new OpenFileDialog(); // создаем диалоговое окно OFD.ShowDialog(); // открываем диалоговое окно string path = OFD.FileName; // считываем путь до выбранного изображения System.Drawing.Image SDI = System.Drawing.Image.FromFile(path); // создаем объект для загрузки в базу ImageConverter IC = new ImageConverter(); // создаем конвертер для перевода картинки в двоичный формат byte[] Barray = (byte[])IC.ConvertTo(SDI, typeof(byte[])); // создаем байтовый массив для хранения картинки photo.Photo = Barray; // заполняем поле в бд BaseClass.BaseConnect.UserPhoto.Add(photo); BaseClass.BaseConnect.SaveChanges(); user.Avatar = photo.id; // изменяем номер аватара, который будет отображен в личном кабинете BaseClass.BaseConnect.SaveChanges(); MessageBox.Show("Изображение добавлено"); FrameClass.MainFrame.Navigate(new PersonalPage(user.id)); } catch { MessageBox.Show("Не удалось загрузить фото"); } } private void BtnManyPhoto_Click(object sender, RoutedEventArgs e) // для добавления в базу сразу нескольких фото { OpenFileDialog OFD = new OpenFileDialog(); OFD.Multiselect = true; // открываем диалоговое окно с возможностью выбора нескольких элементов if (OFD.ShowDialog()==true) { foreach (string file in OFD.FileNames) // цикл для записи нескольких фото в базу { UserPhoto up = new UserPhoto(); up.idUser = user.id; up.Photo = File.ReadAllBytes(file); // сразу переводим изображение в байтовый массив BaseClass.BaseConnect.UserPhoto.Add(up); } } BaseClass.BaseConnect.SaveChanges(); } List _photos = new List(); // список для хранения всех фото пользователя int n = 0; // счетчик для отображения картинок private void Button_Click(object sender, RoutedEventArgs e) // выбор фото из галереи { spGallery.Visibility = Visibility.Visible; _photos = BaseClass.BaseConnect.UserPhoto.Where(x=>x.idUser==user.id).ToList(); if (_photos != null) { byte[] Bar = _photos[n].Photo; showImage(Bar, imgGallery); } if (_photos.Count==1) { Next.IsEnabled = false; } } private void Next_Click(object sender, RoutedEventArgs e) { Back.IsEnabled = true; n++; byte[] Bar = _photos[n].Photo; showImage(Bar, imgGallery); if (_photos.Count == n+1) { Next.IsEnabled = false; } } private void Back_Click(object sender, RoutedEventArgs e) { Next.IsEnabled=true; n--; byte[] Bar = _photos[n].Photo; showImage(Bar, imgGallery); if (n == 0) { Back.IsEnabled = false; } } private void btnOld_Click(object sender, RoutedEventArgs e) { byte[] Bar = _photos[n].Photo; showImage(Bar, imUser); user.Avatar = _photos[n].id; BaseClass.BaseConnect.SaveChanges(); spGallery.Visibility = Visibility.Collapsed; } } }