После загрузки в DIB-формате можно помимо структуры BITMAP также получить значения полей заголовка ВМР-файла. Для этого следует объявить переменную типа DIBSECTION и при вызове функции GetObject() передавать ей другую длину буфера:

HBITMAP hBit: DIBSECTION db:
GetObject(hBit. &db. sizeof(DIBSECTION)):

При этом будет заполнена данными структура, описание которой приведено ниже:

typedef struct tagDIBSECTION {
BITMAP dsBm: BITMAPINFOHEADER dsBmih; DWORD dsBitfields[3]; HANDLE dshSection: DWORD dsOffset: } DIBSECTION

Составными частями этой структуры являются структуры BITMAPINFOHEADER и BITMAP.

Если переменная hBit является дескриптором картинки в формате DDB, то вызов функции GetObject (hBit, sizeof (DIBSECTION). (LPSTR)&db) не заполнит данными структуру db.

Следует помнить, что при загрузке изображения функцией Load Image () создаваемый формат определяется флагом LR_CREATEDIBSECTION, а при создании битовой карты функцией CreateCompatibleBitmap(HDC hdc, int X. int Y) - контекстом hdc,

Работа с растровыми изображениями

принятым за образец. Если hdc является контекстом устройства, то создается ап-паратно-зависимый растр. Если в hdc хранится контекст памяти, уже связанный с битовой картой формата DIB, то создается аппаратно-независимое растровое изображение.

Ограничение доступа по указателю к данным аппаратно-зависимого растра и невозможность занесения дескриптора HBITMAP в контекст изображения функцией SelectObject() заставляют считать, что функция LoadlmageC) всегда записывает DIB-карты в системную память, a DDB при наличии свободной видеопамяти может загружаться в память видеоадаптера. Также это может означать, что в контексте изображения указатель на видеопамять и указатель на объект «битовая карта» являются одним и тем же элементом. Следовательно, замена в нем битовой карты дескриптором загруженной картинки приведет к потере адреса видеобуфера. Поэтому для вывода загруженной из файла растровой картинки на экран ее дескриптор сначала связывают с контекстом памяти, а потом копируют в выбранное окно одной из функций копирования.


⇐ Предыдущая| |Следующая ⇒