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