По курсовому проектированию
Студенту Маслову Семёну Валерьевичу
Факультет инженерно-экономический курс 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 приложение.
Приложение позволяют открывать несколько изображении из графических файлов, также упорядочивать их по горизонтали или вертикали и отображать нужное дочернее окно, так и сохранять измененные изображения в графические файлы.
Приложение ещё позволяет превращать изображения в контурные с использованием только черного и белого цвета и можно выбрать какие изображения будут отображаться в окнах измененные или нормальные.
С помощью окна критерий (которое можно скрыть) можно изменить критерии превращения пикселя в белый или черный.
Проанализировать полученный результат можно сказать, что поставленная задачи в курсовой работе выполнена, но так же можно доработать окно критериев сделав конкретней и больше добавить критериев, добавить ещё возможность переключатся между нормальным и изменённым видом изображения у одного отдельного окна, а так же возможно поработать с внешним самого приложения.