Графічні методи мови програмування для платформи .NET

Nata
0


Програми, написані для платформи .NET працюють з графікою за допомогою бібліотеки GDI+. Ця бібліотека дозволяє створювати малюнки на формі або елементах управління. Вона представляє собою набір просторів імен для роботи з 2d графікою: кольору (Color), пера (Pen), кисті (Brush), шрифти (Font) та інше.

Графічні служби GDI+ доступні через простір імен System.Drawing. Перш ніж використовувати графічні методи класу System.Drawing.Graphics для малювання примітивних фігур, ви повинні у вашому коді створити об'єкти Graphics (Область малювання), Реn (Перо) і Brush (Кисть).


Об'єкт Graphics (Область малювання)

Об'єкт Graphics (Область малювання) дозволяє вибрати в якості області малювання певний елемент управління і володіє методами малювання графічних фігур.

Об'єкт Graphics можна створити трьома різними способами.

Перший спосіб полягає у використанні методу CreateGraphics () форми або елемента управління, на якому треба відобразити графіку. Зазвичай в якості області малювання вибирається розміщене на формі графічне поле (наприклад, PictureBox1):

Другий спосіб використовується для створення растрових зображень, які можна зберегти як графічний файл. Найчастіше тут мається на увазі властивість Image форми або елемента управління (наприклад, PictureBox1.Image).

Третій спосіб використовується у події Paint форми або елемента управління. Ця подія відбувається при їх створенні або оновленні.


Об'єкт Pen (Перо)

У класі Graphics є безліч різних методів, призначених для малювання найрізноманітніших геометричних фігур, таких як лінії, прямокутники, овали та кола, багатокутники, криві Безьє і т.д. Об'єкт Pen призначений для визначення таких параметрів контура фігури, як її ширина і колір.


Об'єкт Brush (Кисть)

Об'єкт Brush (Кисть) визначає колір і стиль зафарбовування прямокутників, кіл і інших замкнутих фігур.


Проект PaintApp - приклад обробки події Paint

Для наочної демонстрації методики обробки події Paint ми підготуємо найпростіший додаток PaintApp, який малює у своєму вікні текстовий рядок та геометричні фігури.

Перш за все, створіть проект PaintApp.
Далі виділіть у вікні дизайнера форму Form1 та відкрийте вкладку подій для цієї форми, знайдіть на вкладці рядок події Paint:

Клацніть його двічі лівою кнопкою миші на рядку події Paint. В результаті буде створено обробник події Form1_Paint. Цей обробник буде отримувати управління щоразу, коли з тих чи інших причин виникне необхідність перемальовувати вміст вікна нашого додатка.

Ось у якому вигляді буде створено обробник події Paint мовою Visual Basic:
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint

    End Sub

У якому вигляді буде створено обробник події Paint мовою Visual C#:
        private void Form1_Paint(object sender, PaintEventArgs e)
        {

        }

Оброблювачу Form1_Paint передаються два параметри.

Через перший параметр передається посилання на об'єкт, що спричинив подію. У нашому випадку це буде посилання на форму Form1.

Що ж до другого параметра, через нього передається посилання об'єкт класу PaintEventArgs. Цей об'єкт має дві властивості, доступні тільки для читання - Graphics і ClipRectangle.

Клас Graphics Вам вже знайомий — він є контекстом відображення, необхідним для малювання тексту та геометричних фігур.

Через властивість ClipRectangle передаються межі області, яку має перемалювати обробник події Paint. Ці межі передаються як об'єкта класу Rectangle. Властивості цього класу Left, Right, Width та Height, поряд з іншими властивостями, дозволяють визначити розташування та розміри області.


Отже, давайте відредагуємо вихідний текст програми PaintApp таким чином, щоб у його вікні було намальовано текстовий рядок, прямокутник та еліпс.

Створення програми мовою Visual Basic

Перш за все, створіть у класі Form1 поле text класу string, в якому буде зберігатися текстовий рядок, що відображається:

Public Class Form1
    Dim strText As String

    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint

    End Sub
End Class

Додайте також рядок ініціалізації згаданого поля. Це можна зробити створивши обробник події Load форми:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        strText = "Demo paint"
    End Sub

І, нарешті, змініть вихідний текст обробника події Form1_Paint наступним чином:
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
        Dim g = e.Graphics
        g.Clear(Color.White)
        g.DrawString(strText, New Font("Helvetica", 15), Brushes.Black, 0, 0)
        g.DrawRectangle(New Pen(Brushes.Black, 2), 10, 30, 200, 100)
        g.DrawEllipse(New Pen(Brushes.Black, 2), 150, 120, 100, 130)
    End Sub


Тут у тілі обробника Form1_Paint ми визначили локальну змінну g класу Graphics, призначену для зберігання контексту відображення. Ця змінна ініціалізується за допомогою значення, отриманого з характеристики Graphics першого параметра обробника Form1_Paint:

        Dim g = e.Graphics

Отримавши контекст відображення, наш обробник події Paint може малювати у вікні все, що завгодно.
Спочатку ми зафарбовуємо вікно білим кольором, викликаючи для цього метод Clear, визначений у класі Graphics:

        g.Clear(Color.White)

У такий спосіб ми можемо зафарбувати фон, колір якого заданий для форми як BackColor.

Далі ми викликаємо методи DrawString, DrawRectangle та DrawEllipse, також визначені у класі Graphics:

        g.DrawString(strText, New Font("Helvetica", 15), Brushes.Black, 0, 0)
        g.DrawRectangle(New Pen(Brushes.Black, 2), 10, 30, 200, 100)
        g.DrawEllipse(New Pen(Brushes.Black, 2), 150, 120, 100, 130)


Перший малює текстовий рядок у верхній частині вікна, а два інших — прямокутник і еліпс, відповідно.



Слід звернути увагу на особливості системи координат: лівий верхній кут області малювання - це позиція (0,0), Координата x зростає зліва направо, а координата y - зверху вниз.



Створення програми мовою Visual C#

На відміну від Visual Basic у класі Form1 поле класу string можна назвати text. У Visual Basic так не можна, слово text позначає властивість форми.

Іншою відмінністю є те, що рядок ініціалізації цієї змінної можна додати до конструктора класа Form1. Тобто не потрібно програмувати обробник події Load форми.

Отож, на Visual C# код буде таким:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;


namespace PaintAppCS

{

    public partial class Form1 : Form

    {

        public string text;


        public Form1()

        {

            InitializeComponent();

            text = "Demo paint";

        }


        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            Graphics g = e.Graphics;

            g.Clear(Color.White);

            g.DrawString(text, new Font("Helvetica", 15), Brushes.Black, 0, 0);

            g.DrawRectangle(new Pen(Brushes.Black, 2), 10, 30, 200, 100);

            g.DrawEllipse(new Pen(Brushes.Black, 2), 150, 120, 100, 130);

        }

    }

}



--------------------------------

Використані джерела:
https://ua.waykun.com/articles/grafika-v-visual.php
http://um.co.ua/10/10-9/10-92602.html
https://www.cyberforum.ru/windows-forms/thread180793.html
https://www.frolov-lib.ru/books/msnet/c_sharp2/ch10.html



Дописати коментар

0Коментарі
* Please Don't Spam Here. All the Comments are Reviewed by Admin.
Дописати коментар (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Accept !