Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






І. Теоретичні відомості






GDI+

GDI+ є подальшим розвитком GDI, містить нові та оптимізує існуючі можливості. Він є частиною операційних систем Windows XP i Windows.NET Server та забезпечує відображення двовимірної векторної графіки, зображень та форматованого тексту на екрані і принтері. GDI+ заснований на класах мови С++ та призначений для використання додатками мовами С/С++.

GDI+ має наступні нові можливості:

- зафарбовування замкнених фігур пензлем змінного кольору;

- сплайни, задані масивом точок, через які повинна проходити гнучка лінія сплайна;

- методи масштабування, обертання та переміщення об'єктів;

- прозоре зафарбовування шляхом змішування кольорів;

- класи Image, Bitmap, Metafile, які підтримують завантаження, зберігання та маніпулювання бітовими зображеннями форматів BMP, GIF, JPEG, Exif, PNG, TIFF, ICON, WMF i EMF.

В GDI спочатку одержують контекст пристрою відображення і налагоджують його параметри. Функції відображення в GDI використовують налагодження контексту пристроя.

В GDI+ створюють об'єкт Graphics і викликають його методи. Контекст пристрою в GDI і об'єкт Graphics в GDI+ грають однакову роль. В останньому випадку параметри просто передають як аргументи виклику методів.

В GDI+ розділені методи малювання контура і зафарбовування внутрішньої частини замкнених фігур.

GDI+ підтримує формати BMP, GIF, JPEG, Exif, PNG i TIFF.

BMP - це стандартний формат, використовувания Windows для зберігання незалежних від зовнішніх пристроїв та додатків зображень. Число бітів на піксель (1, 4, 8, 15, 24, 32 або 64) визначено в заголовку файлу.

GIF - загальнодоступний на Web-сторінках формат. Добре працює для штрихових малюнків, зображень з частинами суцільного кольору і з різкими границями між кольорами. GIF-файли інформацію зберігають в стислому вигляді так, що декомпресоване зображення точно відповідає оригіналу. Один колір в GIF може бути позначений прозорим, щоб зображення переймало фон сторінки. GIF-файл може зберігати масив зображень, щоб потім формувати анімаційне зображення. В GIF-файлі кожному пікселю виділяється 8 біт, так що вони обмежені 256 кольорами.

JPEG - це схема стискання, яка працює добре для точкових зображень типу фотознімків. Ступінь стискання 20: 1 забезпечує якість зображення, яку людське око практично не відрізняє від оригіналу. Стискання нефеективне для штрихових малюнків, блоків суцільного кольору та різких границь. JPEG-формат зберігає 24 біта на піксель. Є також напівтоновий формат, який зберігає 8 біт на піксель. JPEG не підтримує прозорість або анімацію.

Exif - це формат файлу цифрових фотокамер. Exif-файл мітсить зображення, стиснуте по JPEG, і інформацію про фотознімок (дата, швидкодія затвора, час витримки експозиції і т.ін.) і про камеру (виготовник, модель і т.д.).

PNG зберігає багато переваг формату GIF. Подібно GIF-файлам, PNG-файли стиснуті без втрат інформації, виділяють 8, 24 або 48 біт на піксель і шкалу яркості 1, 2, 4, 8 або 16 біт на піксель. PNG-файл для кожного пікселя може зберігати значення, яке визначає засіб змішування кольора пікселя з кольором фону.

TIFF - це гнучкий та розширюваний формат. Файли TIFF можуть зберігати зображення з довільним числом бітів на піксель і можуть використовувати ряд алгоритмів стискання. В одному багатосторінковому файлі може бути декілька зображень. В файлі може бути збережена інформація про сканер, комп'ютер, спосіб стискання, орієнтацію, шаблони пікселю і т.д.

 

Структура інтерфейса GDI+

GDI+ містить біля 40 класів, 50 переліків, 8 структур та 6 функцій, які не є методами жодного класу. Ядро інтерфейсу GDI+ складає клас Graphics - він відображає графічні об'єкти.

Певні класи служать структурними типами. Деякі з них (наприклад, Rect, Point, Size) - загального призначення. Інші - спеціального призначення і є допоміжними класами.

Деякі класи служать інструменатми відображення. Наприклад, об'єкти Color, Pen, Brush, Image, Font створюють незалежно від об'єкту Graphics, але використовуються методами відображення.

Аналогічно визначені структури налагодження інструментів та режимів відображення. Наприклад, структура ColorMap містить пару об'єктів Color, які формують таблицю перекладу кольорів.

Переліки містять списки констант.

З функцій, які не є методами жодного класу, обов'язково використовують дві. Функцію GdiplusStartup викликають до першого звертання до GDI+. А функцію GdiplusShutdown викликають після завершення роботи в GDI+.

Практично всі методи GDI+ перевантажені, тобто використовують одне й т ж ім'я, але з різними списками параметрів.

Більшість методів повертає значення типу Status.

В GDI+ є клас Image для роботи з растровими зображеннями та метафайлами. Класи Bitmap i Metafile наслідуються з класу Image. Клас Bitmap поширює можливості класу Image методами маніпулювання зображеннями. Клас Metafile поширює можливості класу Image методами запису і перевірки векторних зображень.

Приклад. Розглянемо виведення у вікно з використанням GDI+. Відобразимо 2 прямокутника: один при обробці повідомлення WM_PAINT, інший - при оброці повідомлення WM_LBUTTONDOWN.

Розв'язок.

#include " Functions.h"

#define UNICODE

#include < gdiplus.h>

using namespace Gdiplus;

#pragma comment (lib, " gdiplus.lib")

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInstance;

char szClass[]=" MyGDIPlus";

VOID Example(HDC hdc)

{Graphics graphics(hdc);

Pen pen(COLOR(255, 0, 0, 255), 2);

graphics.DrawRectangle(& pen, 5, 5, 50, 100); }

VOID Example1 (HDC hdc, int l, int t)

{Graphics graphics(hdc);

Pen pen(Color(255, 255, 0, 0), 4);

graphics.DrawRectangle(& pen, l, t, 70, 80); }

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT nCmdShow)

{ MSG msg; HWND hwnd;:: hInstance=hInstance;

GdiplusStartupInput gdiplusStartupInput;

ULONG_PTR gdiplusToken;

GdiplusStartup(& gdiplusToken, & gdiplusStartupInput, NULL);

if (! RegClass(WndProc, szClass, COLOR_WINDOW)) return FALSE;

hwnd=CreateWindow (szClass, " MyGDIPlus",

WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

0, 0, hInstance, NULL);

if (! hwnd) return FALSE;

while (GetMessage(& msg, NULL, 0, 0)) DispatchMessage(& msg);

GdiplusShutdown(gdiplusToken);

return(int)msg.wParam; }

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{switch(msg)

{case WM_PAINT:

{PAINTSTRUCT ps; HDC hdc=BeginPaint(hwnd, & ps);

Example(hdc);

EndPaint(hwnd, & ps); return 0; }

case WM_LBUTTONDOWN:

{int l, t; HDC hdc=GetDC(hwnd);

l=LOWORD(lParam); t=HIWORD(lParam);

Example1(hdc, l, t);

ReleaseDC(hwnd, hdc); return 0; }

case WM_DESTROY: {PostQuitMessage(0); return 0; }

} return DefWindowProc(hwnd, msg, wParam, lParam); }






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.