Блок BITMAPFILEHEADER - структуру описывающую тип файла, его размер, смещение области битов изображения относительно начала файла.

Блок BITMAPINFO - структуру, содержащую описание размеров, способ представления цвета в битовом изображении, таблицу цветов и биты изображения.

 

Процесс вывода DIB изображений включает в себя несколько этапов:

· загрузка bmp-файла в оперативную память;

· проверка типа изображения, на соответствие формату DIB (BITMAPFILEHEADER);

· определение размера таблицы цветов и если она есть - ее преобразование в палитру;

· выборка палитры в контекст отображения и ее реализация;

· нахождение начала массива бит изображения и его чтение;

· отрисовка изображения.

 

 


Часто для представления в памяти используются именно формат DDB, так как его отображение выполняется быстрее и он, как правило, занимает меньше ресурсов.

Битовый образ в формате DIB не является объектом GDI. Если приложению необходимо динамически изменять битовый образ с использованием средств GDI, оно должно преобразовать полученный из файла упакованный формат DIB в битовый образ формата DDB, который является объектом GDI.Для этого служит функция CreateDIBitmap. Кроме того, для создания битового образа в формате DDB можно воспользоваться функциями CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap или загрузить его из ресурсов приложения при помощи функции LoadBitmap.

· Получение битмапа; Для получения хендла битмапа можно либо создать новый объект и получить его хендл, либо загрузить уже имеющееся изображение. Так как во всех современных версиях Windows битмапы реально хранятся в виде независимых от устройства, то для загрузки изображения в виде DDB надо осуществить преобразование независимого битмапа в зависимый. Это делается либо автоматически — при загрузке битмапа из ресурсов приложения, либо это надо осуществить непосредственно в вашем приложении.

· Формирование или коррекция битмапа; Для рисования на битмапе создается контекст устройства, ассоциированный с данным битмапом, после чего все функции GDI, применяемые к этому контексту, реально взаимодействуют с битмапом и формируют его изображение. Для выполнения этой задачи предназначен совместимый контекст устройства (compatible DC, memory DC), который предназначен именно для этого.

· Отображение битмапа на контексте устройства; GDI не содержит специальных функций для отображения DDB. Вместо этого необходимо ассоциировать битмап с контекстом устройства (как и для рисования), а затем осуществить передачу изображения с одного контекста на другой — для этого в GDI содержится специальный набор функций, называемых функциями передачи растровых изображений или, дословно, функциями для передачи блоков бит (Bit Block Transfer, BLT — произносится «блит»)


Одним из объектов, с которым работает GDI, является битовая карта или растр, дескриптор которого имеет тип HBITMAP. Битовая карта может быть создана несколькими способами, например посредством вызова функции:

HBITMAP CreateCompatibleBitmap (HDC hdc, int nWidth, int nHeight);

 

Аргументы функции описывают контекст устройства, с которым будет совместим растр, и размеры создаваемого растра. Полученный подобным образом растр является аппаратно-зависимым и не подходит для обмена информацией между различными устройствами.Для решения этой проблемы в системе Windows была введена поддержка аппаратно-независимых растров (DIB - Device Independent Bitmap). Главным образом аппаратно-независимый растр используется для хранения графических данных на внешнем носителе в виде BMP-файлов.