Битовые изображения в формате DDB

Изображения DDB либо загружаются из ресурсов приложения, либо создаются непосредственно в оперативной памяти. Для вывода изображений DDB на экран используются такие функции, как BitBlt и StretchBlt.

Изображения DIB, в отличие от изображений DDB, являются аппаратно-независимыми, поэтому без дополнительного преобразования их нельзя отображать на экране с помощью функций BitBlt и StretchBlt.

 


Загрузка изображений из ресурсов приложения

Самый простой способ использования битовых изображений заключается в том, что изображение создается графическим редактором в виде bmp-файла и описывается в файле определения ресурсов приложения при помощи оператора BITMAP:

LOGO BITMAP mylogo.bmp

 

Созданное битовое изображение можно загрузить в память при помощи функции LoadBitmap:

HBITMAP WINAPI LoadBitmap(HINSTANCE hinst, LPCSTR lpszBitmap);

 

hinst – идентификатор копии приложения, из ресурсов которого нужно загрузить изображение.

lpszBitmap – идентификатор ресурса изображения.

Функция LoadBitmap возвращает идентификатор загруженного изображения или NULL при ошибке.

После использования приложение должно удалить битовое изображение.


Приложение может определить параметры загруженного изображения, вызвав функцию GetObject:

int WINAPI GetObject( HGDIOBJ hgdiobj, // идентификатор объекта int cbBuffer, // размер буфера void FAR* lpvObject); // адрес буфера

 

Параметр hgdiobj – идентификатор изображения;

Параметр cbBuffer – указывает на размер структуры BITMAP.

Параметр lpvObject – указывает на структуру типа BITMAP, в которую будут записаны сведения об изображении.

Например определить параметры изображения можно следующим образом:BITMAP bm;HBITMAP hBitmap;GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);

 


Структура BITMAP имеет вид:

typedef struct tagBITMAP{ int bmType; int bmWidth; int bmHeight; int bmWidthBytes; BYTE bmPlanes; BYTE bmBitsPixel; void FAR* bmBits;} BITMAP;
Поле Описание
bmType Тип битового изображения. Должен быть равен 0
bmWidth Ширина битового изображения в пикселах, должна быть больше 0
bmHeight Высота битового изображения в пикселах, должна быть больше 0
bmWidthBytes Размер памяти, занимаемый одной строкой растра битового изображения.Это значение должно быть четным, так как массив изображения состоит из целых чисел размером 16 бит. Таким образом, произведение bmWidthBytes*8 должно быть кратно 16. Кроме того, это произведение должно быть больше или равно произведению bmWidth*bmBitsPixel
bmPlanes Количество плоскостей в битовом изображении. В зависимости от типа видеоадаптера и его режима работы для представления цвета одного пиксела может использоваться несколько бит, расположенных в одной или нескольких плоскостях видеопамяти.
bmBitsPixel Количество битов, используемых для представления цвета пиксела. Если используется несколько плоскостей, то это поле содержит количество бит одной плоскости, используемых для представления цвета пиксела
bmBits Дальний указатель на массив, содержащий биты изображения