Анотація: В лекції розглядаються два види комп'ютерної графіки: векторна і растрова графіка. Способи створення об'єкта Graphics. Малювання прямих ліній. Використання деяких можливостей друку документа. Поділ коду виведення на екран і друк. Малювання ламаних ліній і будиночка ламаними лініями. Застосування функції DrawLines () для малювання графіків. Параметричні рівняння і малювання кривих. Малювання еліпса спеціалізованим методом, спіралі, прямокутників, дуг. Малювання прямокутника з закругленими кутами і секторів. Покращене малювання секторів. Заливка прямокутників, еліпсів і секторів.
Малювання графічних примітивів засобами GDI +
Файли до лабораторної роботи Ви можете завантажити тут .
Комп'ютерна графіка ділиться на два види:
- Векторна графіка - практичне застосування аналітичної геометрії, включаючи малювання ліній і заливання замкнутих областей, а також відображення тексту з різними атрибутами.
- Растрова графіка - включає бітові карти і зображення предметів реального світу.
Нижче ми познайомимося з векторною графікою в тому вигляді, в якому вона реалізована в Microsoft Windows Forms і GDI +. Всі розглянуті тут функції малювання є методами класу Graphics і починаються із префікса Draw (малюють лінії) або Fill (виконують заливку в межах).
Для малювання потрібен об'єкт Graphics, який визначає контекст пристрою. Клас System.Drawing. Graphics оголошений як sealed (не підтримує спадкування) і його конструктор не є відкритим, тому безпосередньо створити об'єкт Graphics можна
- Graphics gr = new Graphics (); // Не можна !!!
- class MyGraphics: Graphics {}; MyGraphics gr = new MyGraphics (); // Теж не можна !!!
Способи створення об'єкта Graphics
Для створення об'єкта Graphics можна застосувати один з таких способів:
- При перевизначенні методу OnPaint () або створенні обробника події Paint в будь-якому класі, похідному від System.Windows.Forms.Control (наприклад, Form) ми отримуємо об'єкт Graphics як властивість Graphics класу PaintEventArgs class MyGraphics: Form {public MyGraphics () {this. Paint + = new PaintEventHandler (MyGraphics_Paint); } Private void MyGraphics_Paint (object sender, PaintEventArgs e) {Graphics graphics = e.Graphics; // Це вірно! }} Лістинг 16.1. Спосіб створення об'єкта Graphics
- Для малювання на формі або елементі управління (всі вони успадковують Control) не тільки в заміщенні методі OnPaint () або обробнику події Paint, але і в інших місцях програми, можна викликати метод CreateGraphics () цього елемента управління.
Часто класи викликають метод CreateGraphics () в своїх конструкторах, щоб отримати потрібні дані про GDI + або виконати ініціалізацію. Елементи управління або форми можуть також малювати під час подій миші, клавіатури або таймера, тимчасово створюючи і звільняючи об'єкт Graphics (контекст пристрою). Головне, щоб об'єкт Graphics створювався тільки на період обробки події, і ні в якому разі не зберігався в поле класу. По завершенні об'єкта graphics програма повинна негайно викликати його метод graphics.Dispose (), щоб віддати контекст пристрою іншим програмам.
- Можна отримати об'єкт типу System.Drawing.Printing.PrintPageEventArgs, який у властивості містить відповідний для даного принтера об'єкт Graphics, встановивши обробник події PrintPage при друку.
- У деяких елементів управління (меню, списків, рядків стану) є властивість OwnerDraw, що дозволяє програмі динамічно малювати на цьому елементі управління. Події MeasureItem і DrawItem передають своїм обробникам в аргументах об'єкти типу MeasureItemEventArgs і DrawItemEventArgs, у яких у властивостях є об'єкт Graphics і який можна використовувати в обробнику для малювання.
- Щоб малювати по бітової карті або метафайлу, потрібно отримати спеціальний об'єкт Graphics, викликавши статичний метод Graphics .FromImage ().
- Якщо потрібно отримати інформацію з об'єкта Graphics, пов'язаного з принтером, що не друкуючи ніяких даних, можна використовувати метод CreateMeasurementGraphics () об'єкта класу System.Drawing.Printing.PrinterSettings
- При взаємодії з кодом Win32 отримати об'єкт Graphics дозволяють статичні методи рівня класу Graphics .FromHdc () і Graphics .FromHwnd ()