Робота з растровими зображеннями
ALTE DOCUMENTE
Робота з растровими зображеннями
Оскільки Windows - це операційна система 10410y2410k, що працює в графічному режимі, Ви можете використовувати у своїх програмах графічні елементи. Тому важливо усвідомити, як у робочій області вікна можна малювати такі елементи, як лінії, круги і прямокутники, використовуючи різноманітні функції Win dows API (ці функції будуть розглядатися пізніше). Як саме растрове зображення, і спосіб виведення його на екран відрізняються від згаданих графічних елементів. Растрове зображення є самовизначеним ресурсом, який програма використовує як єдине ціле. Воно містить побітове уявлення малюнка, яке відображається на екрані таким, як воно є, інакше кажучи, програма відображає його як єдине ціле.
MYBP 1 BITMAP Bfly 1. bmp
Виведення растрового зображення на екран. Створивши растрове зображення та включивши його опис у файл ресурсів, можна виводити його на екран будь-яку кількість разів. Однак виведення растрового зображення на екран трудомісткіший, ніж виведення курсора або іконки. Нижче описано дії, які необхідно виконати з цією метою.
Перш ніж використовувати растрове зображення, необхідно завантажити його і запам'ятати його дескриптор. Найкраще це 10410y2410k можна зробити у функції WinMain(). Для завантаження растрового зображення використовується функція API LoadBitmap():
HBITMAP LoadBitmap(HINSTANCE hThisInst,
Параметр hThisInst повинен містити дескриптор поточного екземпляра програми, a lpszNam e - покажчик на рядок-ім'я растрового зображення, заданий у файлі ресурсів. Ця функція повертає дескриптор завантаженого растрового зображення чи NULL у разі помилки. Наприклад:
HBITMAP hBit1; // Дескриптор растру
hBit 1 = LoadBitmap (hThisInst, "MYBP 1"); //Завантажити растр
Цей фрагмент програми завантажує растрове зображення з ім'ям MYPP 1 і запам'ятовує отриманий дескриптор в hBit 1 .
Перед виведенням растрового зображення на екран, Ваша програма повинна буде виконати таку послідовність дій:
1. Отримати контекст пристрою для вікна, де буде виводитися растрове зображення.
2. Отримати еквівалентний контекст пристрою для пам'яті, в якому зберігатиметься растрове зображення (растрове зображення зберігається в пам'яті та звідти копіюється у вікно).
3. Виберіть растрове зображення в контексті пам'яті.
4. Скопіювати растрове зображення з пам'яті у вікно виводу, з контексту пам'яті в контекст пристрою вікна. Це призведе до появи растрового зображення на екрані.
Щоб продемонструвати, як реалізуються ці дії у програмі, розглянемо наступний фрагмент, який виводить растрове зображення на екран при кожному натисканні лівої кнопки миші (мається на увазі, що растрове зображення вже завантажено):
DC = GetDC (hwnd); // Отримати DC
memDC=CreateCompatibleDC(DC); // Сумісний DC
memDC ,0,0, SRCCOPY); // Виведення растру на екран
ReleaseDC (hwnd, DC); // Звільнити DC
DeleteDC (memDC); // Звільнити DC пам'яті
Розглянемо докладніше це 10410y2410k т фрагмент програми. Спочатку оголошуються два контексти пристроїв. DC зберігатиме поточний контекст пристрою вікна, що отримується під час виклику GetDC () . Інший контекст пристрою memDC створюється для пам'яті, в якій зберігатиметься растрове зображення. Всередині оператора case спочатку необхідно отримати контекст пристрою вікна. Цейоператор необхідний, оскільки растрове зображення буде виводитись у робочій області вікна, а висновок можливий лише після отримання контексту пристрою. Потім створюється контекст пристрою для пам'яті, де зберігається растрове зображення. Цей контекст пристрою має бути сумісним із контекстом пристрою вікна.
Сумісний контекст пристрою створюється при виклику функції API CreateCompatibleDC() виду:
HDC CreateCompatibleDC (HDC hdc);
Ця функція повертає дескриптор області пам'яті, сумісної з контекстом пристрою вікна, що задається, у hdc . Ця пам'ять буде використовуватися для створення зображення перед виведенням його на екран. У разі помилки функція повертає NULL .
Перш ніж растрове зображення можна буде вивести на екран, його слід вибрати в контексті пристрою, використовуючи функцію API SelectObject () . Оскільки програма може використовувати кілька растрових зображень, необхідно вибрати те, що передбачається виводити на екран. Прототип функції вибору SelectObjectO має такий вигляд:
HGDIOBJ SelectObject (HDC hMdc, HGDIOBJ hObject);
Тут hMdc задає контекст пристрою для пам'яті, в якій зберігається об'єкт, a hObject - дескриптор це 10410y2410k об'єкта. Функція повертає дескриптор об'єкта, який було обрано раніше, дозволяючи за необхідності вибирати його знову.
Щоб вивести вибраний об'єкт на екран, використовується функція API BitBlt () , яка копіює растрове зображення з одного контексту пристрою до іншого. Ось її прототип:
BOOL BitBlt(HDC hDest, int X, int Y,
int W > int Height, HDC hSource,
int SourceX, int SourceY, DWORD (dwRaster);
Тут hDest означає контекст пристрою виведення, a Xі Y - координати точки верхнього лівого кута прямокутника, який виводитиметься растрове зображення. Розміри растрового зображення задаються параметрами Width і Height . Параметр hSourse містить дескриптор вихідного контексту пристрою, який у цьому випадку є контекстом пам'яті, отриманим при виклику Сгеа teCompatibleDC() . Параметри SourceX та SourceY задають координати верхньоголевого кута растрового зображення. Зазвичай вони дорівнюють 0. Параметр dwRaster задає спосіб виведення растрового зображення на екран. Найчастіше використовувані значення 10410y2410k го параметра наведені в наступній таблиці 6.1.