Введение
Актуальной темой для любой девочки является выбор аксессуаров, будь то платья, брюки, головные уборы, обувь и т.д. И выбирая новые вещи в магазине, хочется сразу представить себе, как они будут выглядеть на нас, в сочетании с теми вещами, которые у нас уже есть. Потому, увидев что-то новое, мы мысленно подбираем к нему всё остальное.
Но в наш век прогресса вовсе необязательно осуществлять выбор только мысленно. Практически у каждого современного человека всегда с собой мобильный телефон или любое другое устройство, оснащенное фотокамерой. Поэтому можно просто сфотографировать понравившийся предмет и совместить с его с фотографиями чего-то другого, уже сохранённого ранее. Однако до сих пор не было создано хорошее мобильное приложение или приложение под Windows, позволяющее это сделать.
Я поставила перед собой задачу создать подобное приложение. Для этого я рассмотрела сайты популярных интернет-магазинов. Приложение было разработано в среде VisualStudio 2015 на языке программирования C#. Для работы с изображениями я использовала битовое поле (Bitmap), а для сохранения фотографий аксессуаров я применила сжатие изображений (вейвлет Хаара).
Глава 1. Виртуальный гардероб
Для современных устройств существует масса приложений, связанных с модой и одеждой. Много подобных программ способно ввести в заблуждение пользователя, да и на не очень качественные и функциональные приложения уйдет масса времени. Я расскажу о некоторых из них.
Cluise
Приложение пользуется огромным спросом среди пользователей, а подкупает оно максимально понятным дизайном и простотой использования. С помощью программы можно внести в приложение все то, что у вас есть во всех шкафах.
На основе собранной информации приложение будет советовать, что надеть, учитывая при этом погоду за окном. Кроме того, можно собирать самостоятельно образы и делиться ими с другими пользователями, ставить лайки на идеи других пользователей. Это помогает приложению – более точно подбирать соответствующий стиль.
Среди особенностей программы возможность проверить, насколько желаемая покупка будет сочетаться с уже имеющейся одеждой. Теперь проблемы по поводу того, что надеть решаются просто.
Stylicious
Это приложение для организации собственного гардероба и подбора стиля. Работа с приложением начинается с внесения всех предметов одежды, обуви и аксессуаров с указанием стиля и прочих особенностей. Впоследствии эти фотографии можно сочетать, чтобы создавать готовые наряды и не тратить время на примерки возле зеркала. Желаемую покупку можно также мгновенно «примерить» с другими предметами одежды, чтобы не принимать поспешных решений и не захламливать свой гардероб.
Благодаря встроенному календарю можно заранее планировать, что надеть. В приложении можно делать покупки. Кроме того, можно смотреть советы стилистов, делиться образами в социальных сетях и многое другое.
Глава 2. Мой проект
Это приложение создано, чтобы облегчить вашу жизнь. С помощью этого приложения вы можете собрать вместе свою одежду, обувь и аксессуары.
Во-первых, это поможет вам создать более полное представление о том, что у вас есть, а во-вторых, вы сможете сочетать вещи и смотреть, что у вас есть в гардеробе прямо на экране своего компьютера.
Для начала вам придется перебрать и сфотографировать все ваши вещи, чтобы внести их в приложение.
Возможно, для кого-то это приложение станет незаменимым помощником.
Внешний вид PersonalCloset
Литература
РихтерД. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#. 4-е изд. 2017 – 896с.
Виссер Дж. Разработка обслуживаемых программ на языке C# 2017 – 192 с.
Фаронов В.В. Создание приложений с помощью C#: Руководство программиста - М: «Эксмо», 2008. - 576 с.
Павловская Т.А. С#. Программирование на языке высокого уровня.Учебник для вузов.— СПб.:Питер,2009.—432с:ил.
ДжонШарп. Microsoft Visual C#. Подробное руководство – 848с.
Приложение
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
using System.IO;
usingSystem.Windows.Forms;
namespacepersonal_closet
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
publicint k = 0;
//============= ЗАГРУЗИТЬГОЛОВНОЙУБОР =============
private void button1_Click(object sender, EventArgs e)
{
k = 0;
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
if(k==0)
pictureBox1.Load(openFileDialog1.FileName);
else if(k==1)
pictureBox4.Load(openFileDialog1.FileName);
else if (k == 2)
pictureBox5.Load(openFileDialog1.FileName);
else if (k == 3)
pictureBox6.Load(openFileDialog1.FileName);
}
staticint i = 0;
//=============== СОХРАНЯЕМ В ГАРДЕРОБ ГОЛОВНОЙ УБОР
private void button2_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("gard/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("gard/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox1.Image;
pictureBox2.Image = im;
string name = Convert.ToString(n)+".jpg";
im.Save("gard/"+name);
}
private void button3_Click(object sender, EventArgs e)
{
StreamReadersr = new StreamReader("gard/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
i = (i + 1)%n;
stringadr = "gard/" + Convert.ToString(i) + ".jpg";
pictureBox2.Load(adr);
}
private void button4_Click(object sender, EventArgs e)
{
// выборнужногоаксессуара
switch (comboBox1.SelectedIndex)
{
case 0: pictureBox1.Image=pictureBox2.Image;break;
case 1: pictureBox4.Image = pictureBox2.Image; break;
case 2: pictureBox5.Image = pictureBox2.Image; break;
case 3: pictureBox6.Image = pictureBox2.Image; break;
default: break;
}
}
private void button5_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("want/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("want/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox1.Image;
pictureBox3.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("want/" + name);
}
private void button6_Click(object sender, EventArgs e)
{
StreamReadersr = new StreamReader("want/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
i = (i + 1) % n;
stringadr = "want/" + Convert.ToString(i) + ".jpg";
pictureBox3.Load(adr);
}
private void button7_Click(object sender, EventArgs e)
{
switch (comboBox2.SelectedIndex)
{
case 0: pictureBox1.Image = pictureBox3.Image; break;
case 1: pictureBox4.Image = pictureBox3.Image; break;
case 2: pictureBox5.Image = pictureBox3.Image; break;
case 3: pictureBox6.Image = pictureBox3.Image; break;
default: break;
}
}
// ================ ЗАГРУЗИТЬВЕРХ =============
private void button10_Click(object sender, EventArgs e)
{
k = 1;
openFileDialog1.ShowDialog();
}
private void button8_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;
}
private void button15_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("gard/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("gard/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox4.Image;
pictureBox2.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("gard/" + name);
}
private void button12_Click(object sender, EventArgs e)
{
k = 2;
openFileDialog1.ShowDialog();
}
private void button14_Click(object sender, EventArgs e)
{
k = 3;
openFileDialog1.ShowDialog();
}
private void button9_Click(object sender, EventArgs e)
{
pictureBox4.Image = null;
}
private void button16_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("gard/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("gard/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox5.Image;
pictureBox2.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("gard/" + name);
}
private void button17_Click(object sender, EventArgs e)
{
// считываем порядковый номер сохраняемого изображения
StreamReadersr = new StreamReader("gard/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("gard/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox6.Image;
pictureBox2.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("gard/" + name);
}
private void button18_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("want/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("want/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox4.Image;
pictureBox3.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("want/" + name);
}
private void button19_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("want/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("want/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox5.Image;
pictureBox3.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("want/" + name);
}
private void button20_Click(object sender, EventArgs e)
{
// считываемпорядковыйномерсохраняемогоизображения
StreamReadersr = new StreamReader("want/count.txt");
int n = Convert.ToInt32(sr.ReadLine());
sr.Close();
// увеличиваем порядковый номер на один
StreamWritersw = new StreamWriter("want/count.txt");
sw.WriteLine(n + 1);
sw.Close();
// сохраняем изображение с очередным порядковым номером
Image im = pictureBox6.Image;
pictureBox3.Image = im;
string name = Convert.ToString(n) + ".jpg";
im.Save("want/" + name);
}
private void button13_Click(object sender, EventArgs e)
{
pictureBox6.Image = null;
}
private void button11_Click(object sender, EventArgs e)
{
pictureBox5.Image = null;
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 0;
stringadr = "gard/0.jpg";
try { pictureBox2.Load(adr); }
catch { }
adr = "want/0.jpg";
try { pictureBox3.Load(adr); }
catch { }
}
}