Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИГС / Lab_02 / labor_02pm.doc
Скачиваний:
10
Добавлен:
17.04.2018
Размер:
699.9 Кб
Скачать

Графические вставки из bmp-файлов в win программах.

Вставить графический bmp-файл, любогоbmp-формата вWindows-программу значительно легче, чем в соответствующуюDOS-программу. Существует несколько способов подключенияbmp-файла к программе.

Наиболее быстрый способ, это рассматривать bmp-файл как компонент ресурсов приложения. Рассмотрим этот способ.

Пусть изображение корабля будет располагаться в поле вывода, размером 640480 пикселей. Подготовим соответствующийbmp-файл. Причем возьмем самое большое количество цветов 255255255 = 16 777 216 (около 17 миллионов цветов). Для этого подойдетbmp-файл с форматом в 24 бита. Возьмем картину корабля в файлеship_24.bmpформата 102476824bbmp. Используем программуCorelPHOTO-PAINT, как было показано выше. В результате получаем нужный нам файлship_24b.bmpв формате 64048024bbmp.

Пусть новая программа будет создана на основе программы move01.cpp. В этой программе уберем фон в виде зеленого эллипса и систему координат, и вместо фона будем использовать картину корабля изbmp-файлаship_24b.bmp. Создадим проект с именемmove07.

Далее создадим файл ресурсов move07.rc. Этот файл будет содержать всего лишь одну строчку.

BitmapShip BITMAP "ship_24b.bmp"

Теперь сделаем необходимые изменения в файлеmove07.cpp. В начале файла вставим одну строчку кода.

//идентификатор приложения

HINSTANCE hInstApp;

В функции CreateApp() добавим строчку.

hInstApp = hInstance;

Это сделано для того, чтобы идентификатор приложения стал глобальной переменной в программе.

В функции Move_OnCreate() изменим размеры поля вывода, сделав его размером 640480.

nLeft = 60; nRight = 700; mTop = 15; mBottom = 495;

Растровое изображение, находящееся в bitmap-ресурсе обрабатывается следующим образом.

При создании исполняемого exe-файла, все ресурсы, в том числе иbitmap-ресурсы, располагаются вexe-файле. Чтобы использоватьbitmap-ресурс, ему надо придать в памяти вид битовой карты. Эту операцию выполняет функцияLoadBitmap(). Эта функция беретbitmap-ресурс из загруженного в памятьexe-файла, придаетbitmap-ресурсу вид битовой карты и загружает в новую область памяти.

Далее для рисования в памяти создается контекст памяти, совместимый с контекстом экрана, с помощью функции CreateCompatibleDC().

Затем битовая карта связывается с контекстом памяти с помощью функции SelectObject().

После этого изображение из контекста памяти копируется в контекст экрана с помощью функции BitBlt(). В результате растровое изображение появляется на экране в окне приложения.

В конце полагается убрать битовую карту из памяти, восстановить контекст памяти и убрать контекст памяти.

В функции Move_OnPaint()выполняются все перечисленные действия. Добавим в функцию Move_OnPaint() несколько строчек кода, для вывода растрового изображения из памяти в окно программы.

//создаем контекст памяти hdcMem, совместимый с контекстом экрана hdc

HDC hdcMem = CreateCompatibleDC(hdc);

//загружаем в память bitmap-ресурс из модуля exe-файла

//hInstApp - идентификатор экземпляра приложения

//"BitmapShip" - идентификатор bitmap-ресурса (в файле ресурсов)

//hBitmap - идентификатор загруженного bitmap-ресурса

HBITMAP hBitmap = LoadBitmap(hInstApp, "BitmapShip");

//выбираем bitmap-объект hBitmap в контекст памяти hdcMem

HBITMAP hBitmapOld = (HBITMAP)SelectObject(hdcMem, hBitmap);

//копируем изображение из контекста памяти в контекст экрана

BitBlt(hdc, nLeft, mTop, nRight-nLeft, mBottom-mTop, hdcMem, 0, 0, SRCCOPY);

DeleteObject(hBitmap); //убираем растровое изображение из памяти

SelectObject(hdcMem, hBitmapOld); //восстанавливаем контекст памяти

DeleteDC(hdcMem); //убираем контекст памяти

Убираем строчку вызова функции, которая рисовала старый фон.

// Land(hdc);

Компилируем, запускаем программу mov07.exe, и результат работы этой программы будет таким же, как и на Рис.34. Правда, насыщенность красок буде несравненно выше.

Рис. 35.

Результат работы программы mov07.cpp.

Соседние файлы в папке Lab_02