Инструкция для пользователя

По курсовому проектированию

Студенту Маслову Семёну Валерьевичу

Факультет инженерно-экономический курс 2 группа ЭИС-26  

I. Тема проекта и исходные данные

Создать в C# с использованием Windows Forms MDI приложение, позволяющее открывать изображения из графических файлов, превращать изображения в контурные с использованием только черного и белого цвета, задавая критерий превращения пикселя в черный или в белый, сохранять измененные изображения в графические файлы.

Текстовые

Пояснительная записка_________________________________________________________

Графические

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

III. Рекомендуемая литература и материал:

_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________

IV. Дата выдачи задания ____________________________

V. Срок сдачи законченного проекта _____________

VI. Отметка о явке на консультацию:

1) __________________ 2) ______________________ 3) ________________________

4) __________________ 5) ______________________ 6) ________________________

Руководитель проекта Зав. кафедрой

Задание принял к исполнению « _____» _____________ Студент___________________  

                                                                                                              (подпись студента)

 

 

1 Введение.

В данной работе поставлена задача: создать в C# с использованием Windows Forms MDI приложение, позволяющее открывать изображения из графических файлов, превращать изображения в контурные с использованием только черного и белого цвета, задавая критерий превращения пикселя в черный или в белый, сохранять измененные изображения в графические файлы.

Алгоритмы и методы

Для Form1 задает значение, указывающее, что эта форма контейнером для дочерних MDI-форм: которыми будут обвялены Form2, Form3.

Form2 Ch1 = new Form2();

Form3 Ch2= new Form3();

IsMdiContainer = true;         

Ch1.MdiParent = this;

Ch2.MdiParent = this;

Так же в Form1 используются события:

1)

private void открытьToolStripMenuItem_Click

private void сохранитьКакToolStripMenuItem_Click

Проверявшие выбранную активную дочернюю форму ActiveMdiChild и вызывавшие метод public void open (int R2) и public void save () из Form3, в которых уже производится открытые и сохранение изображения выбранной формы с вызовом окна диалога OpenFileDialog и SaveFileDialog.

2)

private void button1_Click

Проходящие по всем дочерним формам MdiChildren с изображениями и вызывавшие методы public int G, в который получает значение g (которое является критерием для изменения в изображении пикселя в черный или белый) из Form2, public void change (int g, int R2) из Form3, в котором производится изменение изображений с помощью класса BitmapData и статического класс Marshal и типа IntPtr.

3)

private void radioButton1_CheckedChanged

private void radioButton2_CheckedChanged

Определяют значение r2 (которое определят какие будут показаны в методах: Базовые или измененные) с выбором одной из двух radioButton и также вызывавшие метод changeR(r2), который меняет изображения на базовые или измененные.

4)

private void поГоризонаталиToolStripMenuItem_Click

private void поВертикалиToolStripMenuItem_Click

Выстраивает все дочерние формы по горизонтали или вертикали.

5)

private void критерииToolStripMenuItem_Click

Отображает форму с критериями, если ты была скрыта.

6)

private void критерииToolStripMenuItem_Click

Создает новую дочернюю форму Form3 с панелью изображения.

В Form2 используются события:

1)

private void textBox1_TextChanged

Проверяет правильно ли введено в textBox число.

2)

private void textBox1_Click

Выделяет число в textBox при нажатии.

3)

private void button1_Click

Скрывает форму с критериями.

В Form3 используются событие:

private void Form3_SizeChanged

При изменении размера Form3 изменяет под его размеры pictureBox.

Инструкция для пользователя

Строка меню

Файл пункты:

1) Открыть (открывает изображение в выбранной Панели изображение)

2) Сохранить (Сохраняет изображение из выбранной Панели изображение)

3) Выход (Предлагает выйти из программы)

Вид пункты:

1) Показать критерии (показывает окно критериев если то было скрыто)

2) Новая панель изображения (создает новую панель изображения)

3) Упорядочить (упорядочивает окна)

С подпунктами:

*По горизонтали

*По вертикали

(Также в Вид есть пункты, которые отображают нужное окно и добавляются при создании новых окон)

О программе (Сообщает информацию о программе)

Кнопка Изменить

(Изменяется изображение в черно-белое)

Переключатели изображений в нормальный вид

Или измененный.

Окно критериев

(в нем можно или скрыть само окно или изменить параметр, влияющий на превращение пикселя изображения в черный или белый.)

 4 Код

namespace CyrVr8

{

public partial class Form1: Form

{

   int g = 125, r2 = 1, i, Num = 1;

   Form2 Ch1 = new Form2();

   Form3 Ch2= new Form3();

 

   public Form1()

   {

       InitializeComponent();

       IsMdiContainer = true;

       radioButton1.Checked = true;

       Ch1.MdiParent = this;

       Ch1.Show();

       Ch2.MdiParent = this;

       Ch2.Text = "Панель изображения " + Convert.ToString(Num);

       Ch2.Show();

   }

 

   private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

   {

       MessageBox.Show("Курсовая работа Маслова Семёна, где созданно в C# с использованием Windows Forms MDI приложение, позволяющее открывать изображения из графических файлов, превращать изображения в контурные с использованием только черного и белого цвета, задавая критерий превращения пикселя в черный или в белый, сохранять измененные изображения в графические файлы.");

   }

 

   private void открытьToolStripMenuItem_Click(object sender, EventArgs e)

   {

       if (ActiveMdiChild!= null)

       {

           try

           {

               Form3 f = (Form3)ActiveMdiChild;

               f.open(r2);

           }

           catch

           {

               MessageBox.Show("Выберите одну из панелей изоражения!");

           }

       }

   }

 

   private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)

   {

       if (ActiveMdiChild!= null)

       {

           try

           {

               Form3 f = (Form3)ActiveMdiChild;

               f.save();

           }

           catch

           {

               MessageBox.Show("Выберите одну из панелей изоражения!");

           }

       }

   }

 

   private void выходToolStripMenuItem_Click(object sender, EventArgs e)

   {

       MessageBoxButtons msb = MessageBoxButtons.YesNo;

       String message = "Вы действительно хотите выйти?";

       String caption = "Выход";

       if (MessageBox.Show(message, caption, msb) == DialogResult.Yes)

           this.Close();

   }

 

   private void button1_Click(object sender, EventArgs e)

   {

       g = Ch1.G;

 

       Form[] fo = MdiChildren;

       for (i = 1; i < MdiChildren.Length; i++)

       {

           Form3 f = (Form3)fo[i];

           f.change(g, r2);

       }

   }

 

   private void radioButton1_CheckedChanged(object sender, EventArgs e)

   {

       r2 = 1;

 

       Form[] fo = MdiChildren;

       for (i = 1; i < MdiChildren.Length; i++)

       {

           Form3 f = (Form3)fo[i];

           f.changeR(r2);

       }

   }

 

   private void radioButton2_CheckedChanged(object sender, EventArgs e)

   {

       r2 = 2;

       Form[] fo = MdiChildren;

       for (i = 1; i < MdiChildren.Length; i++)

       {

           Form3 f = (Form3)fo[i];

           f.changeR(r2);

       }

   }

 

   private void поГоризонаталиToolStripMenuItem_Click(object sender, EventArgs e)

   {

       LayoutMdi(MdiLayout.TileHorizontal);

   }

 

   private void поВертикалиToolStripMenuItem_Click(object sender, EventArgs e)

   {

       LayoutMdi(MdiLayout.TileVertical);

   }

 

   private void критерииToolStripMenuItem_Click(object sender, EventArgs e)

   {

       if (Ch1.Width == 0 && Ch1.Height == 0)

       {

           Ch1.Size = Ch1.MaximumSize;

           Ch1.FormBorderStyle = FormBorderStyle.Sizable;

       }

       Ch1.Activate();

   }

 

   private void панельИзображенияToolStripMenuItem_Click(object sender, EventArgs e)

   {

       Form3 Ch3 = new Form3();

       Ch3.MdiParent = this;

       Num += 1;

       Ch3.Text = "Панель изображения " + Convert.ToString(Num);

       Ch3.Show();

   }

}

}

 

namespace CyrVr8

{

public partial class Form2: Form

{

   int g = 125;

   public int G

   {

       get { return g; }

       set { g = value; }

   }

 

   public Form2()

   {

       InitializeComponent();

   }

 

   private void textBox1_TextChanged(object sender, EventArgs e)

   {

       try

       {

           g = Convert.ToInt32(textBox1.Text);

           if (g > 255) { g = 255; textBox1.Text = "255"; }

       }

       catch

       {

           MessageBox.Show("Не верный ввод!");

           g = 125;

           textBox1.Text = "125";

           textBox1.SelectionStart = 0;

           textBox1.SelectionLength = textBox1.Text.Length;

       }

   }

 

 

   private void textBox1_Click(object sender, EventArgs e)

   {

       textBox1.SelectionStart = 0;

       textBox1.SelectionLength = textBox1.Text.Length;

   }

 

   private void button1_Click(object sender, EventArgs e)

   {

       if (this.Width!= 0 || this.Height!= 0)

       {

           this.FormBorderStyle = FormBorderStyle.None;

           this.Width = 0;

           this.Height = 0;

       }

   }

}

}

 

namespace CyrVr8

{

public partial class Form3: Form

{

   Bitmap b;

   Bitmap b2;

   public Form3()

   {

       InitializeComponent();

       pictureBox1.Size = this.Size;

       b = new Bitmap(pictureBox1.Width, pictureBox1.Height);

       b2 = new Bitmap(pictureBox1.Width, pictureBox1.Height);

   }

   public void open(int R2)

   {

 

       OpenFileDialog openFile1 = new OpenFileDialog();

 

       openFile1.DefaultExt = "*.jpg, *.jpeg, *.jpe, *.jfif, *.png";

       openFile1.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";

 

       if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)

       {

           b = (Bitmap)Image.FromFile(openFile1.FileName);

           b2 = (Bitmap)Image.FromFile(openFile1.FileName);

           if (R2 == 1)

           {

               pictureBox1.Image = b;

           }

           if (R2 == 2)

           {

               pictureBox1.Image = b2;

           }

       }

   }

   public void save()

   {

       SaveFileDialog saveFile1 = new SaveFileDialog();

 

       saveFile1.DefaultExt = "*.jpg, *.jpeg, *.jpe, *.jfif, *.png";

       saveFile1.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";

 

       if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)

       {

           b2.Save(saveFile1.FileName);

       }

   }

   public void change(int g, int R2)

   {

       b2 = (Bitmap)b.Clone();

       Rectangle rect = new Rectangle(0, 0, b2.Width, b2.Height);

       System.Drawing.Imaging.BitmapData b2Data = b2.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, b2.PixelFormat);

       IntPtr ptr = b2Data.Scan0;

       int byt = Math.Abs(b2Data.Stride) * b2.Height;

       byte[] rgbV = new byte[byt];

       System.Runtime.InteropServices.Marshal.Copy(ptr, rgbV, 0, byt);

       for (int counter = 0; counter < rgbV.Length; counter += 3)

       {

           if (rgbV[counter] >= g && rgbV[counter + 1] >= g)

           {

               rgbV[counter] = 255;

               rgbV[counter + 1] = 255;

               rgbV[counter + 2] = 255;

           }

           else if (rgbV[counter] >= g && rgbV[counter + 2] >= g)

           {

               rgbV[counter] = 255;

               rgbV[counter + 1] = 255;

               rgbV[counter + 2] = 255;

           }

           else if (rgbV[counter + 1] >= g && rgbV[counter + 2] >= g)

           {

               rgbV[counter] = 255;

               rgbV[counter + 1] = 255;

               rgbV[counter + 2] = 255;

           }

           else

           {

               rgbV[counter] = 0;

               rgbV[counter + 1] = 0;

               rgbV[counter + 2] = 0;

           }

       }

       System.Runtime.InteropServices.Marshal.Copy(rgbV, 0, ptr, byt);

       b2.UnlockBits(b2Data);

       if (R2 == 1)

       {

           pictureBox1.Image = b;

       }

       if (R2 == 2)

       {

           pictureBox1.Image = b2;

       }

   }

 

   public void changeR(int R2)

   {

       if (R2 == 1)

       {

           pictureBox1.Image = b;

       }

       if (R2 == 2)

       {

           pictureBox1.Image = b2;

       }

   }

 

   private void Form3_SizeChanged(object sender, EventArgs e)

   {

       pictureBox1.Size = this.Size;

   }

 

}

}

 

Заключение

В данной работе было создано в C# с использованием Windows Forms MDI приложение.

Приложение позволяют открывать несколько изображении из графических файлов, также упорядочивать их по горизонтали или вертикали и отображать нужное дочернее окно, так и сохранять измененные изображения в графические файлы.

Приложение ещё позволяет превращать изображения в контурные с использованием только черного и белого цвета и можно выбрать какие изображения будут отображаться в окнах измененные или нормальные.

С помощью окна критерий (которое можно скрыть) можно изменить критерии превращения пикселя в белый или черный.

Проанализировать полученный результат можно сказать, что поставленная задачи в курсовой работе выполнена, но так же можно доработать окно критериев сделав конкретней и больше добавить критериев, добавить ещё возможность переключатся между нормальным и изменённым видом изображения у одного отдельного окна, а так же возможно поработать с внешним самого приложения.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: