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

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

Формат bmp -файлов представлен на рис. 3.1

Рис. 3.1

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

typedef struct tagBITMAPFILEHEADER {

WORD bfType; // Признак BMP – файла, 42 4D (коды букв ВМ)

DWORD bfSize; // Размер файла

WORD bfReserved1; // Первое резервное поле - всегда ноль.

WORD bfReserved2; // Второе резервное поле - тоже ноль

DWORD bfOffBits; // Смещение от начала файла до первого

// байта графических данных

} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

Сразу после структуры BITMAPFILEHEADER в файле следует структура BITMAPINFO, которая содержит описание изображения и таблицу цветов.

typedef struct tagBITMAPINFO {

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

} BITMAPINFO, *PBITMAPINFO;

Описание изображения (размеры изображения, метод компрессии, размер таблицы цветов и т. д.) находится в структуре BITMAPINFOHEADER.

typedef struct tagBITMAPINFOHEADER{

DWORD biSize; // Размер BITMAPINFOHEADER в байтах.

LONG biWidth; // Ширина картинки в пикселах

LONG biHeight; // Высота картинки в пикселах

WORD biPlanes; // Количество битовых плоскостей (=1, см. MSDN)

WORD biBitCount; // Количество бит на пиксел (определяет

// Mаксимальное число цветов в bitmap)

DWORD biCompression; // Cпособ сжатия (0 - данные не сжимаются).

DWORD biSizeImage; // Размер изображения в байтах (без заголовков)

LONG biXPelsPerMeter; // Число пикселов на метр по горизонтали

LONG biYPelsPerMeter; // Число пикселов на метр по вертикали

DWORD biClrUsed; // Количество элементов палитры, хранящихся

// после заголовка

DWORD biClrImportant; // Количество разных цветов, действительно

// используемых в рисунке.

} BITMAPINFOHEADER, *PBITMAPINFOHEADER;

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

typedef struct tagRGBQUAD

{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;

Па­литра отсутствует, если число бит на пиксел равно 24. Также палитра не нужна и для некоторых цветовых форматов 16 и 32 бит на пиксел.

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

Точное значение смещения битов изображения находится в структуре BITMAPFILEHEADER.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: