123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- 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
- {
- /// <summary>
- /// Логика взаимодействия для PersonalPage.xaml
- /// </summary>
- public partial class PersonalPage : Page
- {
- /// <summary>
- /// Метод для отображения изображения
- /// </summary>
- /// <param name="array">байтовый массив</param>
- /// <param name="img">имя изображения в разметке</param>
- 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<UserPhoto> _photos = new List<UserPhoto>(); // список для хранения всех фото пользователя
- 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;
- }
- }
- }
|