Разработка ПО графического редактора

МИНСКИЙ ИНСТИТУТ УПРАВЛЕНИЯ



Факультет Учётно-Финансовый                        «К защите допускаю»

Кафедра   АИС                                                  Демидович Е.М.

              «     » ____________2011 г.









КУРСОВАЯ РАБОТА

по дисциплине

«Визуальные средства разработки программных приложений»

на тему  «Разработка ПО графического редактора»

Выполнил студент гр. 81101    ФИО Мороз В.А.

 специальность ИСиТ (в экономике) 





Руководитель _________________________ Демидович Е.М.





















МИНСК 2011г.



РЕФЕРАТ



Курсовая работа

Студент гр.81101   Мороз В.А.

 «Разработка программного обеспечения графического редактора»

Объем работы 27 страниц.

Ключевые слова: класс  Form1, generic, внешний класс, внешний метод, замыкания, делегаты, локальные переменные.**** 

В курсовой работе описана разработка программы для работы с графическими файлами, используя язык программирования высокого уровня С# на платформе .NET, включая следующее аспекты: ****

Загрузка медиафайлов в поток

Использование событий MenuItem

Использование PictureBox

Работа с изображением загруженным в PictureBox

Использование библиотеки Drawing.Printing.PrintDocument

Использование статистических методов


МИНСКИЙ ИНСТИТУТ УПРАВЛЕНИЯ





Факультет:    Учётно-Финансовый

Специальность:   Информационные системы  и технологии (в экономике)

 



                                                                                  УТВЕРЖДАЮ

                                          Зав. кафедрой

                                                                           _______________Курмашев В.И. 

                                                                          “___”_____________2011  года









ЗАДАНИЕ

на курсовой проект







по дисциплине «Визуальная средства разработки программных приложений»

студента Мороза В.А. 

1. Тема: «Разработка программного обеспечения графического редактора».

2. Срок сдачи студентом законченной курсовой работы.

3. Исходные данные: создать визуальное программное приложение для работы с графическими файлами; создать интерфейс для удобства взаимодействия пользователя и программы.

4. Перечень подлежащих разработке вопросов и календарный график

№  п/п

Наименование вопросов курсовой работы

Срок исполнения

1

Подбор литературы



2

Ознакомление с литературой



3

Системное проектирование 



4

Функциональное проектирование 



5

Оформление курсовой работы









Руководитель ______________________________________Демидович Е.М.

Задание принял к исполнению______________________________________

						 (подпись)



ОГЛАВЛЕНИЕ

	РЕФЕРАТ	1

	ПОСТАНОВКА ЗАДАЧИ	5

	ВВЕДЕНИЕ	6

		1.	ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ	7

1.1. Разработка алгоритма работы приложения	7

1.2. Разработка структуры приложения и структуры данных	8

1.3. Разработка программного кода приложения	9

1.4. Результат выполнения приложения	11

1.5. Инструкция по использованию программы	13

1.5.1. Загрузка графического файла	13

1.5.2. Вывод графического файла на печать.	13

1.5.3. Изменение параметров страниц.	13

1.5.4. Сохранение графического файла.	14

1.5.5. Редактирования графического файла .	14

1.5.6. Выход из программы	14

	СПИСОК ЛИТЕРАТУРЫ	16

	Приложение	17






ПОСТАНОВКА ЗАДАЧИ



Цель данной курсовой работы: разработка программы для работы с графическими файлами, используя язык программирования высокого уровня С# на платформе .NET.

В программе будут реализованы следующие функции:

Открывать графический файл.

Сохранять графический файл.

Вывод на печать.

Изменение страницы печати.

Изменение размеров графического файла.


ВВЕДЕНИЕ



Использование новых информационных технологий в разных сферах деятельности человека привело к разработке программного обеспечения для создания графических объектов(файлов) и дальнейшей работы с ними. Такое программное обеспечение было востребовано на рынке информационных технологий, потому постоянно изменяется, включая в себя всё новые и новые возможности. 

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


 

		ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ

1.1. Разработка алгоритма работы приложения

Алгоритм работы создаваемого приложения выглядит следующим образом.




1.2. Разработка структуры приложения и структуры данных



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

Структура меню имеет следующий вид:





1.3. Разработка программного кода приложения

Язык программирования С# в настоящее время считается основным языком, используемым для разработки коммерческих программных продуктов. Он является языком общего назначения. Естественная для него область применения – системное программирование, реализуемое во всех возможных вариантах. Кроме того, С# успешно используется во многих областях приложения, далеко выходящих за указанные рамки. Программное обеспечение написанное на С# в настоящее время используется на всех компьютерах, начиная с самых скромных микрокомпьютеров – до самых больших супер-ЭВМ.

В разрабатываемой программе используется класс  Form1:

public class Form1 : System.Windows.Forms.Form

	{

		private System.Windows.Forms.MainMenu mainMenu1;

		private System.Windows.Forms.MenuItem menuFile;

		private System.Windows.Forms.MenuItem menuOpen;

		private System.Windows.Forms.MenuItem menuSave;

		private System.Windows.Forms.MenuItem menuItem1;

		private System.Windows.Forms.MenuItem menuPageSetup;

		private System.Windows.Forms.MenuItem menuPreview;

		private System.Windows.Forms.MenuItem menuPrint;

		private System.Windows.Forms.MenuItem menuItem5;

		private System.Windows.Forms.MenuItem menuExit;

		private System.Windows.Forms.MenuItem menuView;

		private System.Windows.Forms.MenuItem menuResize;

		private System.Windows.Forms.OpenFileDialog openFileDialog1;

		private System.Windows.Forms.SaveFileDialog saveFileDialog1;

		private System.Windows.Forms.ContextMenu contextMenu1;

		private System.Windows.Forms.PictureBox pictureBox1;

		private System.Windows.Forms.MenuItem menuBase;

		private System.Windows.Forms.MenuItem menuCenterImage;

		private System.Windows.Forms.MenuItem menuAutoSize;

		private System.Windows.Forms.MenuItem cmenuResize;

		private System.Windows.Forms.MenuItem cmenuBase;

		private System.Windows.Forms.MenuItem cmenuCenterImage;

		private System.Windows.Forms.MenuItem cmenuAutoSize;

		private System.Windows.Forms.StatusBar statusBar1;

		private System.Windows.Forms.StatusBarPanel sbFile;

		private System.Windows.Forms.StatusBarPanel sbSize;

		private System.Windows.Forms.PrintDialog printDialog1;

		private System.Windows.Forms.PrintPreviewDialog printPreviewDialog1;

		private System.Windows.Forms.PageSetupDialog pageSetupDialog1;

        private System.Drawing.Printing.PrintDocument printDocument1;

        private IContainer components;



		public Form1()

		{

			InitializeComponent();

		}

	

	

		protected override void Dispose( bool disposing )

		{

			if( disposing )

			{

				if (components != null) 

				{

					components.Dispose();

				}

			}

			base.Dispose( disposing );

		}



Остальной код указан в Приложении


1.4. Результат выполнения приложения



Рабочее окно.



Программа с загруженным графическим файлом





Окно при вызове Параметров страницы



Вызов Предварительного просмотра




1.5. Инструкция по использованию программы

Программа предназначена работы с графическими файлами. Для функционирования программы необходим персональный компьютер любой работоспособной конфигурации.  Программа может работать в различных операционных системах, таких как Windows 2000/XP/Vista/SEVEN.



Начало работы программы…





1.5.1. Загрузка графического файла

Для загрузки графического файла необходимо нажать файл-открыть (Ctrl+O), и выбрать необходимое изображение.





1.5.2. Вывод графического файла на печать.

Для вывода графического файла на печать необходимо нажать файл-Print (Ctrl+P), и  ввести необходимые параметры.



1.5.3. Изменение параметров страниц.

Для изменение параметров страниц необходимо нажать файл-Page Setup, и ввести необходимые параметры



1.5.4. Сохранение графического файла.

Для сохранения графического файла необходимо нажать файл-сохранить (Ctrl+S), и выбрать место куда будет сохранено изображение.



1.5.5. Редактирования графического файла .

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





1.5.6. Выход из программы

Для выхода из программы, необходимо нажать файл-выход(Alt+F4).


ЗАКЛЮЧЕНИЕ

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

При выполнении курсового проекта были пройдены все этапы разработки специализированного прикладного программного обеспечения: 

		формализация задачи;

		сбор необходимых исходных данных, используемых в программе;

		ознакомление с литературой;

		более углубленное изучение платформы .NET

В данном курсовом проекте было разработано визуальное приложение, которое позволяет:

Открывать графический файл.

Сохранять графический файл.

Выводить на печать.

Изменять страницы печати.

Изменять размеры графического файла.



Для программы был разработан интерфейс, позволяющий не очень опытному пользователю работать с программой.

В ходе курсового проекта был более детально изучен язык С#, а также  использование платформы .NET.


СПИСОК ЛИТЕРАТУРЫ





Лабор В.В. – С# Создание приложений для Windows (2003)

Шилдт Г. – Полный справочник по C#

Эндрю Троелсен -  С# и платформа .NET

Павловская – Программирование на языке высокого уровня на С#.

Фролов А.В. Фролов Г.В. – Язык С#

Petzold_Programming_MS_Windows__Sharp_v12



	




Приложение



using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;

using System.Drawing.Printing;



namespace PictureViewer

{

	public class Form1 : System.Windows.Forms.Form

	{

		private System.Windows.Forms.MainMenu mainMenu1;

		private System.Windows.Forms.MenuItem menuFile;

		private System.Windows.Forms.MenuItem menuOpen;

		private System.Windows.Forms.MenuItem menuSave;

		private System.Windows.Forms.MenuItem menuItem1;

		private System.Windows.Forms.MenuItem menuPageSetup;

		private System.Windows.Forms.MenuItem menuPreview;

		private System.Windows.Forms.MenuItem menuPrint;

		private System.Windows.Forms.MenuItem menuItem5;

		private System.Windows.Forms.MenuItem menuExit;

		private System.Windows.Forms.MenuItem menuView;

		private System.Windows.Forms.MenuItem menuResize;

		private System.Windows.Forms.OpenFileDialog openFileDialog1;

		private System.Windows.Forms.SaveFileDialog saveFileDialog1;

		private System.Windows.Forms.ContextMenu contextMenu1;

		private System.Windows.Forms.PictureBox pictureBox1;

		private System.Windows.Forms.MenuItem menuBase;

		private System.Windows.Forms.MenuItem menuCenterImage;

		private System.Windows.Forms.MenuItem menuAutoSize;

		private System.Windows.Forms.MenuItem cmenuResize;

		private System.Windows.Forms.MenuItem cmenuBase;

		private System.Windows.Forms.MenuItem cmenuCenterImage;

		private System.Windows.Forms.MenuItem cmenuAutoSize;

		private System.Windows.Forms.StatusBar statusBar1;

		private System.Windows.Forms.StatusBarPanel sbFile;

		private System.Windows.Forms.StatusBarPanel sbSize;

		private System.Windows.Forms.PrintDialog printDialog1;

		private System.Windows.Forms.PrintPreviewDialog printPreviewDialog1;

		private System.Windows.Forms.PageSetupDialog pageSetupDialog1;

        private System.Drawing.Printing.PrintDocument printDocument1;

        private IContainer components;



		public Form1()

		{

			InitializeComponent();

		}

	

	

		protected override void Dispose( bool disposing )

		{

			if( disposing )

			{

				if (components != null) 

				{

					components.Dispose();

				}

			}

			base.Dispose( disposing );

		}



		#region Windows Form Designer generated code

		private void InitializeComponent()

		{

            this.components = new System.ComponentModel.Container();

            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));

            this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);

            this.menuFile = new System.Windows.Forms.MenuItem();

            this.menuOpen = new System.Windows.Forms.MenuItem();

            this.menuSave = new System.Windows.Forms.MenuItem();

            this.menuItem1 = new System.Windows.Forms.MenuItem();

            this.menuPageSetup = new System.Windows.Forms.MenuItem();

            this.menuPreview = new System.Windows.Forms.MenuItem();

            this.menuPrint = new System.Windows.Forms.MenuItem();

            this.menuItem5 = new System.Windows.Forms.MenuItem();

            this.menuExit = new System.Windows.Forms.MenuItem();

            this.menuView = new System.Windows.Forms.MenuItem();

            this.menuResize = new System.Windows.Forms.MenuItem();

            this.menuBase = new System.Windows.Forms.MenuItem();

            this.menuCenterImage = new System.Windows.Forms.MenuItem();

            this.menuAutoSize = new System.Windows.Forms.MenuItem();

            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();

            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();

            this.contextMenu1 = new System.Windows.Forms.ContextMenu();

            this.cmenuResize = new System.Windows.Forms.MenuItem();

            this.cmenuBase = new System.Windows.Forms.MenuItem();

            this.cmenuCenterImage = new System.Windows.Forms.MenuItem();

            this.cmenuAutoSize = new System.Windows.Forms.MenuItem();

            this.pictureBox1 = new System.Windows.Forms.PictureBox();

            this.statusBar1 = new System.Windows.Forms.StatusBar();

            this.sbFile = new System.Windows.Forms.StatusBarPanel();

            this.sbSize = new System.Windows.Forms.StatusBarPanel();

            this.printDialog1 = new System.Windows.Forms.PrintDialog();

            this.printPreviewDialog1 = new System.Windows.Forms.PrintPreviewDialog();

            this.pageSetupDialog1 = new System.Windows.Forms.PageSetupDialog();

            this.printDocument1 = new System.Drawing.Printing.PrintDocument();

            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();

            ((System.ComponentModel.ISupportInitialize)(this.sbFile)).BeginInit();

            ((System.ComponentModel.ISupportInitialize)(this.sbSize)).BeginInit();

            this.SuspendLayout();

            // mainMenu1

            this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

            this.menuFile,

            this.menuView});

            // menuFile

            this.menuFile.Index = 0;

            this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

            this.menuOpen,

            this.menuSave,

            this.menuItem1,

            this.menuPageSetup,

            this.menuPreview,

            this.menuPrint,

            this.menuItem5,

            this.menuExit});

            this.menuFile.Text = "&Файл";

            this.menuFile.Click += new System.EventHandler(this.menuFile_Click);

            // menuOpen

            this.menuOpen.Index = 0;

            this.menuOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO;

            this.menuOpen.Text = "&Открыть";

            this.menuOpen.Click += new System.EventHandler(this.menuOpen_Click);

            // menuSave

            this.menuSave.Index = 1;

            this.menuSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS;

            this.menuSave.Text = "&Сохранить";

            this.menuSave.Click += new System.EventHandler(this.menuSave_Click);

            // menuItem1

            this.menuItem1.Index = 2;

            this.menuItem1.Text = "-";

            // menuPageSetup

            this.menuPageSetup.Index = 3;

            this.menuPageSetup.Text = "Параметры Стра&ницы";

            this.menuPageSetup.Click += new System.EventHandler(this.menuPageSetup_Click);

            // menuPreview

            this.menuPreview.Index = 4;

            this.menuPreview.Text = " Предварительный просм&отр ";

            this.menuPreview.Click += new System.EventHandler(this.menuPreview_Click);

            // menuPrint

            this.menuPrint.Index = 5;

            this.menuPrint.Shortcut = System.Windows.Forms.Shortcut.CtrlP;

            this.menuPrint.Text = "&Печать";

            this.menuPrint.Click += new System.EventHandler(this.menuPrint_Click);

            // menuItem5

            this.menuItem5.Index = 6;

            this.menuItem5.Text = "-";

            // menuExit

            this.menuExit.Index = 7;

            this.menuExit.Shortcut = System.Windows.Forms.Shortcut.AltF4;

            this.menuExit.Text = "&Выход";

            this.menuExit.Click += new System.EventHandler(this.menuExit_Click);

            // menuView

            this.menuView.Index = 1;

            this.menuView.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

            this.menuResize,

            this.menuBase,

            this.menuCenterImage,

            this.menuAutoSize});

            this.menuView.Text = "&Вид";

            this.menuView.Popup += new System.EventHandler(this.menuView_Popup);

            this.menuView.Click += new System.EventHandler(this.menuView_Click);

            // menuResize

            this.menuResize.Index = 0;

            this.menuResize.Text = "&Растянуть на всё окно";

            this.menuResize.Click += new System.EventHandler(this.menuResize_Click);

            // menuBase

            this.menuBase.Index = 1;

            this.menuBase.Text = "&Исходный размер";

            this.menuBase.Click += new System.EventHandler(this.menuBase_Click);

            // menuCenterImage

            this.menuCenterImage.Index = 2;

            this.menuCenterImage.Text = "&Центрировать";

            this.menuCenterImage.Click += new System.EventHandler(this.menuCenterImage_Click);

            // menuAutoSize

            this.menuAutoSize.Index = 3;

            this.menuAutoSize.Text = "&По умолчанию";

            this.menuAutoSize.Click += new System.EventHandler(this.menuAutoSize_Click);

            // openFileDialog1

            this.openFileDialog1.Title = "Выбор изображения";

            // saveFileDialog1

            this.saveFileDialog1.Title = "Сохранение изображения";

            // contextMenu1

            this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

            this.cmenuResize,

            this.cmenuBase,

            this.cmenuCenterImage,

            this.cmenuAutoSize});

            // cmenuResize

            this.cmenuResize.Index = 0;

            this.cmenuResize.Text = "&Растянуть на всё окно ";

            this.cmenuResize.Click += new System.EventHandler(this.cmenuResize_Click);

            // cmenuBase

            this.cmenuBase.Index = 1;

            this.cmenuBase.Text = "&Исходный размер";

            this.cmenuBase.Click += new System.EventHandler(this.cmenuBase_Click);

            // cmenuCenterImage

            this.cmenuCenterImage.Index = 2;

            this.cmenuCenterImage.Text = "&Центрировать";

            this.cmenuCenterImage.Click += new System.EventHandler(this.cmenuCenterImage_Click);

            // cmenuAutoSize

            this.cmenuAutoSize.Index = 3;

            this.cmenuAutoSize.Text = "&По умолчанию";

            this.cmenuAutoSize.Click += new System.EventHandler(this.cmenuAutoSize_Click);

            // pictureBox1

            this.pictureBox1.ContextMenu = this.contextMenu1;

            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;

            this.pictureBox1.Location = new System.Drawing.Point(0, 0);

            this.pictureBox1.Name = "pictureBox1";

            this.pictureBox1.Size = new System.Drawing.Size(616, 266);

            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;

            this.pictureBox1.TabIndex = 0;

            this.pictureBox1.TabStop = false;

            // statusBar1

            this.statusBar1.Location = new System.Drawing.Point(0, 244);

            this.statusBar1.Name = "statusBar1";

            this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {

            this.sbFile,

            this.sbSize});

            this.statusBar1.ShowPanels = true;

            this.statusBar1.Size = new System.Drawing.Size(616, 22);

            this.statusBar1.TabIndex = 3;

            // sbFile

            this.sbFile.Name = "sbFile";

            this.sbFile.Width = 500;

            // sbSize

            this.sbSize.Name = "sbSize";

            // printPreviewDialog1

            this.printPreviewDialog1.AutoScrollMargin = new System.Drawing.Size(0, 0);

            this.printPreviewDialog1.AutoScrollMinSize = new System.Drawing.Size(0, 0);

            this.printPreviewDialog1.ClientSize = new System.Drawing.Size(400, 300);

            this.printPreviewDialog1.Enabled = true;

            this.printPreviewDialog1.Icon = ((System.Drawing.Icon)(resources.GetObject("printPreviewDialog1.Icon")));

            this.printPreviewDialog1.Name = "printPreviewDialog1";

            this.printPreviewDialog1.Visible = false;

            // printDocument1

            this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);

            // Form1

            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

            this.ClientSize = new System.Drawing.Size(616, 266);

            this.ContextMenu = this.contextMenu1;

            this.Controls.Add(this.statusBar1);

            this.Controls.Add(this.pictureBox1);

            this.Menu = this.mainMenu1;

            this.Name = "Form1";

            this.Text = "Picture Viewer";

            this.Load += new System.EventHandler(this.Form1_Load);

            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();

            ((System.ComponentModel.ISupportInitialize)(this.sbFile)).EndInit();

            ((System.ComponentModel.ISupportInitialize)(this.sbSize)).EndInit();

            this.ResumeLayout(false);



		}

		#endregion

		private PictureBoxSizeMode[] ArrayMenu =

		{

			PictureBoxSizeMode.StretchImage,

			PictureBoxSizeMode.Normal, 

			PictureBoxSizeMode.CenterImage,

			PictureBoxSizeMode.AutoSize

		};

		private int selectedMode = 0;

		[STAThread]

		static void Main() 

		{

			Application.Run(new Form1());

		}

		private void menuOpen_Click(object sender, System.EventArgs e)

		{

			OpenFileDialog diag = new OpenFileDialog();

			diag.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*" ;

			if (diag.ShowDialog() == DialogResult.OK)

			{

				pictureBox1.Image = new Bitmap(diag.OpenFile());

			}

			sbFile.Text	= "Загрузка " + diag.FileName;

			sbFile.Text	= "Изображение " + diag.FileName;

			sbSize.Text= String.Format("{0:#} x {1:#}",	pictureBox1.Image.Width, pictureBox1.Image.Height);

		}



		private void menuSave_Click(object sender, System.EventArgs e)

		{

			SaveFileDialog diag = new SaveFileDialog();

			diag.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*" ;

			if(diag.ShowDialog() != DialogResult.OK)

				return;

			string filename = diag.FileName;

			FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite);

			pictureBox1.Image.Save(fs,  System.Drawing.Imaging.ImageFormat.Jpeg);

			fs.Close();

		}



		private void menuExit_Click(object sender, System.EventArgs e)

		{

			this.Close();

		}



		private void menuResize_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[0];

				pictureBox1.Invalidate();

			}

		

		}



		private void menuBase_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[1];

				pictureBox1.Invalidate();

			}

		}



		private void menuView_Popup(object sender, System.EventArgs e)

		{

			if (sender is MenuItem) 

			{

				bool ImLoad	= (pictureBox1.Image != null);

				foreach (MenuItem menuitem in ((MenuItem)sender).MenuItems)

				{

				menuitem.Enabled = ImLoad;

				menuitem.Checked = (this.selectedMode == menuitem.Index);

				}

			}

		}



		private void menuCenterImage_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[2];

				pictureBox1.Invalidate();

			}

		}



		private void menuAutoSize_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[3];

				pictureBox1.Invalidate();

			}

		}



		private void cmenuResize_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[0];

				pictureBox1.Invalidate();

			}

		}



		private void cmenuBase_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[1];

				pictureBox1.Invalidate();

			}

		

		}



		private void cmenuCenterImage_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[2];

				pictureBox1.Invalidate();

			}

			

		}



		private void cmenuAutoSize_Click(object sender, System.EventArgs e)

		{

			if (sender is MenuItem)

			{

				MenuItem menuitem = (MenuItem)sender;

				selectedMode = menuitem.Index;

				pictureBox1.SizeMode = ArrayMenu[3];

				pictureBox1.Invalidate();

			}

		}



		private void menuPageSetup_Click(object sender, System.EventArgs e)

		{

			PageSetupDialog diag

				= new PageSetupDialog();

			diag.Document = printDocument1;

			diag.ShowDialog();

		}



		private void menuPreview_Click(object sender, System.EventArgs e)

		{

			PrintPreviewDialog diag

				= new PrintPreviewDialog();

			diag.Document = printDocument1;

			diag.ShowDialog();

		}



		private void menuPrint_Click(object sender, System.EventArgs e)

		{

			PrintDialog diag = new PrintDialog();

			diag.Document = printDocument1;

			if (diag.ShowDialog() == DialogResult.OK)

			{

				printDocument1.Print();

			}

		}



		private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

		{

			//Если в pictureBox1 не загружена изображение, возвращаемся назад

			if (pictureBox1.Image == null)

			{

				e.Cancel = true;

				return;

			}

			//Определяем печатную область страницы

			float leftMargin = e.MarginBounds.Left;

			float rightMargin = e.MarginBounds.Right;

			float topMargin = e.MarginBounds.Top;

			float bottomMargin= e.MarginBounds.Bottom;

			float printableWidth = e.MarginBounds.Width;

			float printableHeight = e.MarginBounds.Height;

			//Cоздаем экземпляр graph класса Graphics

			Graphics graph = e.Graphics;

			//Создаем экземпляр font  класса Font

			Font font= new Font("Comic Sans MS", 16);

			//Определяем высоту шрифта

			float fontHeight = font.GetHeight(graph);

			//Определяем размер пробелов 

			float spaceWidth = graph.MeasureString(" ", font).Width;

			//Определяем область, в которую будет вписываться изображение, 

			//размер наибольшей стороны 	изображения составялет 90% 

			//от кратчайшей стороны листа

			float imageLength;

			float Xposition = leftMargin;

			float Yposition = topMargin + fontHeight;

			if (printableWidth < printableHeight)

			{

				imageLength = printableWidth * 90/100;

				Yposition += imageLength;

			}

			else

			{

				imageLength = printableHeight * 90/100;

				Xposition += imageLength + spaceWidth;

			}

			// Выводим изображение в области rectImage

			Rectangle rectImage	= new Rectangle((int)leftMargin + 1,	(int)topMargin + 1,(int)imageLength,	(int)imageLength);

			graph.DrawImage(pictureBox1.Image,(int)leftMargin + 1,	(int)topMargin + 1, (int)imageLength,(int)imageLength);

			// Определяем область rectText и выводим в нее строку с размером файла

			RectangleF rectText	= new RectangleF(Xposition, Yposition, rightMargin - Xposition,	bottomMargin - Yposition);

			PrintText(graph, font,"Размер изображения: ", Convert.ToString(pictureBox1.Image.Size), 	ref rectText);

		}

		protected void PrintText( Graphics graph, 	Font font,	string name,	string text,	ref RectangleF rectText)

		{

			// Определяем размеры печатной области для текста:

			float leftMargin = rectText.Left;

			float rightMargin = rectText.Right;

			float topMargin = rectText.Top;

			float bottomMargin = rectText.Bottom;

			//Определяем высоту текста и координаты, где он будет выводиться:

			float fontHeight = font.GetHeight(graph);

			float Xposition = rectText.Left;

			float Yposition = topMargin + fontHeight;

			//Определяем ширину текста и размер пробелов

			float spaceWidth = graph.MeasureString(" ", 	font).Width;

			float nameWidth	= graph.MeasureString(name, font).Width;

			graph.DrawString(name, font,

			Brushes.Black, new PointF(Xposition, Yposition));

			leftMargin += nameWidth + spaceWidth;

			Xposition = leftMargin;

			// Формируем несколько строк для текста  в случае,

			// если он не будет умещаться на одной строке

			string[] words

				= text.Split(" \r\t\n\0".ToCharArray());

			foreach (string word in words)

			{

				float wordWidth = graph.MeasureString(

					word, font).Width;

				if (wordWidth == 0.0)

					continue;

				if (Xposition + wordWidth > rightMargin)

				{

					// Начало с новой строки

					Xposition = leftMargin;

					Yposition += fontHeight;

					if (Yposition > bottomMargin)

					{						

						break;

					}

				}

				graph.DrawString(word, font,Brushes.Black,	new PointF(Xposition, Yposition));

				Xposition += wordWidth;

			}

// Исключаем область, на которую был выведен текст из области печати 

//для избежания наложения текста и рисунка

			rectText.Y = Yposition;

			rectText.Height = bottomMargin - Yposition;

	

		}



        private void Form1_Load(object sender, EventArgs e)

        {

        }



        private void menuFile_Click(object sender, EventArgs e)

        {

        }



        private void menuView_Click(object sender, EventArgs e)

        {



        }	

	}

}





1