Битовые изображения в формате 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 | Дальний указатель на массив, содержащий биты изображения |