Побудова графічних примітивів
з використанням мови C++
і бібліотеки wxWidgets

Перед створенням зображення з використанням бібліотеки wxWidgets потрібно створити об'єкт визначення пристрою (device context, DC). Такий об'єкт у wxWidgets називають wxDC. Його не призначено для безпосереднього використання, замість нього потрібно вибрати один з похідних класів:

Кожен похідний клас призначено для використання у певних умовах:

Методи (функції) одного класу можуть виявитися непридатними до методів іншого. Тому при створенні одного видимого зображення, яке потрібно опрацювати, насправді потрібно створити 4 об'єкти таких класів:

Описане вище можна подати такою схемою.

*.bmp, *.gif,
*.ico, *.jpeg,
*.pcx, *.png,
*.tiff


wxBitmap

~wxMemoryDCwxImage
wxPaintDC

На схемі символом ~ позначено можливість задання еквівалентності вмісту, стрілками — напрям можливого перенесення даних, зеленим кольором — можливість малювання, червоним кольором — можливість аналізу інтенсивності кольорів моделі RGB окремих пікселів.

Рекомендований порядок роботи із зображеннями

  1. Створити (описати) 4 об'єкти таких класів:
    wxBitmap, wxMemoryDC, wxImage, wxPaintDC.
  2. Узгодити растрове зображенням wxBitmap і об'єкт пам'яті wxMemoryDC.
  3. Або намалювати в оперативній пам'яті об'єкт wxMemoryDC,
    або завантажити наявний графічний файл у растрову карту wxBitmap.
  4. Отримати зображення для аналізу wxImage з растрової карти wxBitmap.
  5. Проаналізувати невидиме зображення wxImage.
  6. Відобразити растрову карту wxBitmap у об'єкт видимого зображення wxPaintDC.
  7. Домалювати видиме зображення wxPaintDC згідно з проведеним аналізом.

Примітка. Пункт 6 можна перенести на місце пункту 4.

Опис класу wxDC на сторінці офіційного сайту проекту wxWidgets не дає простих і зрозумілих для початківця вказівок, як імпортувати, створювати, подавати й опрацьовувати зображення. Альтернатива, реалізована у цій публікації, полягає в ознайомленні з конкретними прокоментованими прикладами кодів, які істотно коротші від перелічених в описі на сайті проекту.

Приклад побудови графічних примітивів

— див. вказівки наприкінці коду. Пояснимо, які значення можна надати властивостям об'єктів, зображеним на попередньому малюнку вище.

Родини шрифтів

Стилі написання

Види наповнення

Pen (перо) використовують для зображення ліній (прямих і кривих), контурів многокутників і еліпсів,

Налаштування Pen здійснюють такою вказівкою:

wxPen(const wxColour& colour, int width = 1, int style = wxSOLID)

Вона має такі три агрументи (перелічено у порядку запису, вказано значення як усталено): колір, ширина і стиль. Вище в описі вказівки wxPen вказано значення як усталено. У коді стиль не задано.

Стилі Pen:

Приклад використання стилів Pen

— див. вказівки наприкінці коду, в якому кольору заповнення надано прозорості (*wxTRANSPARENT_BRUSH). Це зроблено з метою не відволікати увагу від стилю контура. Але колір заповнення може бути іншим.

Вбудовані (стандартні) кольори заповнення

Приклад використання градієнтів

— див. вказівки наприкінці коду.

Приклад побудови фігур

— див. вказівки наприкінці коду.

Приклад відображення малюнків

— див. вказівки наприкінці коду.

Приклад поточкового опрацювання побудованого малюнку

— див. вказівки наприкінці коду.


Використані джерела

  1. Device Contexts in wxWidgets

  2. Drawing on a panel with a DC

  3. An image panel

  4. Drawing and Printing in C++ with wxWidgets

  5. Руководство по wxWidgets