полі у верхньому лівому куті форми слід натиснути кнопку «повернути зображення». (див. малюнок 2.3).
Малюнок 2.3 - Результат повороту зображення на 8 градусів
Описані прямокутники на малюнку є допоміжним інструментом, виводяться для власної зручності і показують центр зображення.
У додатку реалізована «захист від дурня», а саме: при спробі ввести кут більше 360 градусів, або менше - 360 градусів, а також текст, виводиться попередження і зображення не буде оброблено:
Малюнок 2.4 - Спроба повернути зображення на - 361 градус
У додатку реалізована можливість «анімованого обертання» по проти годинникової стрілки, а також «зум» (збільшення картинки за розміром контейнера PictureBox).
Рисунок 2.5 - Анимированное обертання
ВИСНОВОК
Завдання, поставлене в технічному завданні до контрольної роботи, реалізована.
Вивчено прийоми обробки зображень, використовуючи мову програмування C #.
Вихідний код додатку представлений в «Додатку А».
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1 Старовойтов В.В. Цифрові зображення: від отримання до
обробки/В.В. Старовойтов, Ю.І. Голуб - Мінськ: ОІПІ НАН Білорусі, 2014. - 202 с.- ISBN 978-985-6744-80-1.
Крістіан Нейгел, Білл Івьен та ін. C # 2008 і платформа .NET 3.5 для професіоналів - Professional C # 2008. - М .: Діалектика, 2008. - ISBN 978-5-8459-1458-3.
3 Розробка додатків на платформі Microsoft. MSDN [Електронний ресурс]: lt; # justify gt; ДОДАТОК А
Лістинг класу «frmRotationForm»
using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Drawing.Drawing2D;Image_Rotation
{partial class frmRotationForm: Form
{int jj;//кут в градусахfrmRotationForm ()
{() ;. Text=pictureBox3.Image.Width.ToString () ;. Text=pictureBox3.Image.Height.ToString ();=Convert.ToInt32 (textBox1.Text);
} void btnRotateImage_Click (object sender, EventArgs e)
{. Image=pictureBox3.Image; ang=0;
{= Convert.ToInt32 (textBox1.Text);
if (ang lt; - 360 || ang gt; 360)
{. Show ( Дозволено використовувати кути від 0 до 360. nДопустается використання знака '- ' для повороту проти годинникової стрілки. ) ;;
}
} (Exception ex)
{. Show ( Дозволено використовувати кути від 0 до 360. nДопустается використання знака '- ' для повороту проти годинникової стрілки. );
return;
} i=new Bitmap (pictureBox1.Image) ;. Image=this.RotateImage (i, ang);
//this.Controls.Add (pictureBox1);
} Bitmap RotateImage (Bitmap Image, int angle)
{pi2=Math.PI/2;//ПІ на два
int oldWidth=Image.Width; oldHeigth=Image.Height; theta=angle * Math.PI/180.0;//переклад в радіаниlocked_theta=theta; (locked_theta lt; 0.0) locked_theta +=2 * Math.PI; newWidth, newHeigth; nWidth, nHeigth; adjacentTop, oppositeTop; adjacentBottom, oppositeBottom;
# region Обчислення нової ширини і висоти
double SINUS=Math.Abs ??(Math.Sin (locked_theta)); COSINUS=Math.Abs ??(Math.Cos (locked_theta)); ((locked_theta gt;=0.0 amp; amp; locked_theta lt ; pi2) || (locked_theta gt;=Math.PI amp; amp; locked_theta lt; (Math.PI + pi2)))
{// Кут ( gt;=0 і lt; Pi/2) або ( gt;=ПІ і lt; ПІ + Пі/2)
adjacentTop=COSINUS * oldWidth;=SINUS * oldWidth;=COSINUS * oldHeigth;=SINUS * oldHeigth;
}
{= SINUS * oldHeigth;=COSINUS * oldHeigth;=SINUS * oldWidth;=COSINUS * oldWidth;
}=adjacentTop + oppositeBottom;=adjacentBottom + oppositeTop;=(int) (Math.Ceiling (newWidth));//округлення до цілих вгору=(int) (Math.Ceiling (newHeigth)) ;
# endregion Обчислення нової ширини і висоти
Bitmap rotatedBmp=new Bitmap (nWidth, nHeigth); g=Graphics.FromImage (rotatedBmp);
Point [] points=new Point [3];//масив з 3 структур типу Point, які визначають паралелограм
//Три точки позначають: верхній лівий, верхній правий, нижній лівий кути паралелограма.
//Четверта точка екс...