Professional Documents
Culture Documents
Інстр Лекція 5 Презентація
Інстр Лекція 5 Презентація
Інструментальні засоби
візуального програмування
ЛЕКЦІЯ №5
Редагування графічних
даних
Графіка
01 1.1. Вступ в Graphics
1.2. Малювання за подією Paint
1.3. Малювання без події Paint
1.4. Кольори .NET
1.5. Пір’я в .NET
1.6. Кисті Brush в .NET
Цей метод повертає об'єкт малювання для форми або елемента управління, для
якого він був викликаний. В даному випадку він викликається для this, а значить, поверне
об'єкт малювання поточної форми.
1.4. Кольори .NET
За колір в .NET відповідає структура Color. Поля цієї структури змінювати не Є кілька перевантажених варіантів методу FromArgb(). Наприклад, колір може бути
можна, тому колір задається тільки на етапі ініціалізації і не може змінюватися. створений на основі числа типу int. Тип даних int складається з 32 бітів - якраз стільки і
Найцікавіше - у цієї структури немає конструктора, який приймає колір або що- потрібно, щоб зберігати всі чотири складові кольору. Метод може зробити зворотну
небудь ще. Є тільки конструктор за замовчуванням, який просто виконує операцію - розбити число int на чотири складові byte.
ініціалізацію: Більш зручним варіантом є метод FromArgb(), який одержує чотири числа для кожної
Колір в .NET представляється у вигляді чотирьох складових: червоного, складової: Color.FromArgb (прозорість, червоний, зелений, синій);
Наступний рядок створює абсолютно непрозорий червоний колір:
зеленого, синього та прозорого. У структури Color є чотири відповідних властивості
Color c = Color.FromArgb (255, 255, 0, 0);
типу byte (а значить, вони будуть змінюватися від 0 до 255):
Наступний спосіб отримати колір - скористатися методом FromName(), який приймає як
• A - альфа-канал, що визначає прозорість;
параметр назва кольору у вигляді рядка і намагається перетворити його в структуру Color.
• R - червоний колір;
Наприклад, наступний рядок створює зелений колір по його імені "Green": Color c =
• G - зелений колір;
Color.FromName("Green");
• B - синій колір.
Наступний варіант - використовувати метод FromKnownColor(). Цей метод отримує в
У сумі ці властивості займають в пам'яті 4 байта (32 біта). Змішанням цих
якості параметра перерахування KnownColor, яке складається з безлічі назв квітів і назв
складових можна отримати будь-який колір з 16 мільйонів можливих.
системних кольорів, які входять в інші перерахування, такі як SystemColors або Color:
А тепер найцікавіше - так як складові були доступними для читання, то після
Color c = Color.FromKnownColo(KnownColor.ButtonShadow);
створення ми не можемо змінити колір, і наступний код завершиться помилкою на
Системні кольори простіше отримувати через перерахування SystemColors.
другому рядку:
Наприклад, наступний рядок инициализирует змінну кольором, який використовує система
Але як же тоді створити потрібний нам колір, якщо у нас немає конструктора і для малювання тіні для кнопки: Color c = SystemColors.ButtonShadow;
немає можливості змінювати властивості? За допомогою статичних методів Color, Якщо потрібен один з основних кольорів, то можна використовувати статичні
наприклад: FromArgb(), FromName(), FromKnownColor(). властивості самої структури Color. У неї вже є зумовлені значення для основних кольорів.
Наприклад, наступний рядок використовує зумовлений червоний колір для створення
змінної: Color c = Color.Red;
1.4. Кольори .NET
У структури Color є ще кілька цікавих властивостей:
• IsEmpty - якщо false, то структура не проініціалізувати, і колір порожній;
• IsKnownColor - якщо true, то колір відомий системі. Такі кольори є в
перерахуванні KnownColor;
• IsNamedColor - якщо true, то у кольори є дружнє користувачеві ім'я;
• IsSystemColor - якщо true, то цей колір відповідає одному із системних;
• Name - ім'я кольору.
1.5. Пір’я в .NET
При малюванні фігур на поверхні Graphics нам доведеться оперувати двома Програма просто малює лінії, при цьому змінюється стиль олівця, що робить лінії
поняттями: лінія і заливка. Ці поняття найчастіше асоціюють з олівцем і пензлем унікальними. Давайте розглянемо цей код докладніше, щоб зрозуміти, що відбувається.
відповідно. За допомогою олівця ми малюємо лінії, а за допомогою кисті У другому рядку ініцілізується олівець у вигляді об'єкта класу Pen. Конструктор
заповнюємо простір (розфарбовуємо). Наприклад, лінія прямокутника може бути приймає два параметри:
чорного кольору, а внутрішність прямокутника може заповнюватися іншим кольором. • колір майбутнього олівця;
За стиль олівця в .NET відповідає клас Pen. Для ілюстрації найцікавіших • товщину лінії в пікселях.
Як товщини ми вибрали трієчку, щоб лінії було краще видно. У першому блоці коду
властивостей цього класу я написав невеличкий приклад, який ми зараз і розглянемо.
за допомогою циклу foreach перебираються всі значення перерахування DashStyle.
У ньому кілька ліній малюються різними пір'ям.
Однойменну властивість є у олівця, і воно відповідає за стиль лінії. Існують шість стилів:
Solid, Dash, Dot, DashDot, DashDotDot, Custom, і відповідні шість ліній. Зверніть
увагу, що 5 і 6 лінії однакові. Це тому, що Custom не має стилю, але замість цього
дозволяє користувачеві задавати свій стиль, що і відбувається в другому блоці коду
прикладу.
Отже, другий блок створює свій стиль. Це робиться через властивість
DashPattern, яке має тип масиву значень float. Кожне значення в цьому масиві - це
значення довжини лінії і пробілу по черзі. Це означає, що перше число задає довжину
лінії, друге - довжину пробілу, потім знову лінії і т. д. Таким чином, ви можете створити
свій власний малюнок ліній.
Останній блок коду малює п'ять ліній в циклі, поступово збільшуючи властивість
DashOffset. Це властивість відповідає за зміщення в лінії, починаючи з якого буде
створюватися малюнок олівця. Мені складно передати словами сенс зміщення -
найкраще це передають останні п'ять ліній на малюнку.
1.6. Кисті Brush в .NET
В .NET є кілька класів заливки, базовим для яких є Brush. Це клас, який Ще одна кисть, яку ми розглянемо, - LinearGradientBrush:
дозволяє задавати параметри заливки для таких фігур, як прямокутник, еліпс, текст і
т. д. Найпростіший спосіб отримати кисть потрібного кольору - використовувати
системну кисть з перерахування SystemBrushes. Наприклад, наступний рядок
створює заливку, якої в Windows фарбуються робочі області вікон:
Brush brush = SystemBrushes.Window; Кисть LinearGradientBrush дозволяє створювати лінійний градієнт. Як
Клас Brush абстрактний, і ви не можете створити безпосередньо його конструктора об'єкт отримує дві точки (початок і кінець градієнта) і два кольори
екземпляр, бо у нього є абстрактні методи, які не реалізовані, але створені для того, (початковий і кінцевий кольора градієнта). Маючи ці дані, система сама розфарбує
щоб їх реалізовували спадкоємці. Найпростіший і найпоширеніший спадкоємець: яку заповнюють область плавним переходом від одного кольору до іншого.
SolidBrush. Це не від українського слова "солідний", а від англійського solid –
суцільний. Тобто, ця заливка заповнює область повністю одним кольором і одним
візерунком: