Язык С для чайников

c-site.h1.ru

Структура BMP файла.

Главная страница

Форум

 Полезная информация

TBN 100x100

TBN 100x100

 

Рейтинг:

 

Ниже приведена таблица, показывающая назначение полей структуры BMP файла.

Смещение Длина поля

Описание поля (что тут находится)

Заголовок файла

0 2 Код 4D42h - Буквы 'BM'
2 4 Размер файла в байтах
6 2 0 (Резервное поле)
8 2 0 (Резервное поле)
10 4 Смещение, с которого начинается само    изображение (растр).
Заголовок BITMAP (Информация об изображении)
14 4 Размер заголовка BITMAP (в байтах) равно 40
18 4 Ширина изображения в пикселях
22 4 Высота изображения в пикселях
26 2 Число плоскостей, должно быть 1
28 2 Бит/пиксел: 1, 4, 8 или 24
30 4 Тип сжатия
34 4 0 или размер сжатого изображения в байтах.
38 4 Горизонтальное разрешение, пиксел/м
42 4 Вертикальное разрешение, пиксел/м
46 4 Количество используемых цветов
50 4 Количество "важных" цветов.
Палитра (Карта цветов для N цветов), если используется
54 4*N Палитра

Элемент палитры представляет собой четырёхбайтовую запись (структуру). В этой структуре хранятся составляющие R-красного, G-зеленого и B-синего цветов. Один байт зарезервирован. Палитра может и не использоваться, например в True Color.
Структура элемента палитры:

typedef struct tagRGBQUAD
{
        char   rgbBlue;
        char   rgbGreen;
        char   rgbRed;
        char   rgbReserved;
} RGBQUAD;


В поле тип сжатия должно стоять 0 - сжатие не используется, 1 - RLE8 сжатие, 2 - RLE4 сжатие. RLE8 - используется для сжатия 256-ти цветного изображения, RLE4 - используется для сжатия 16-ти цветного изображения.

В поле по смещению 28 (Бит/пиксел) должно стоять 1 - черно-белое изображение, 4 - 16-ти цветное, 8 - 256-ти цветное, 24 - True Color


typedef unsigned long DWORD;    // Двойное слово - 32 бита (разряда)
typedef unsigned int WORD;         //  Слово - 16 бит (разрядов)
typedef signed long LONG;
typedef unsigned int UINT;


// Заголовок файла
typedef struct tagBITMAPFILEHEADER
{
        UINT bfType;                // 'BM' = 4D42h
        DWORD bfSize;
        UINT bfReserved1;
        UINT bfReserved2;
        DWORD bfOffBits;        // Смещение к растру
} BITMAPFILEHEADER;    

// Заголовок Bitmap
typedef struct tagBITMAPINFOHEADER
{
        DWORD biSize;
        LONG biWidth;
        LONG biHeight;
        WORD biPlanes;
        WORD biBitCount;
        DWORD biCompression;
        DWORD biSizeImage;
        LONG biXPelsPerMeter;
        LONG biYPelsPerMeter;
        DWORD biClrUsed;
        DWORD biClrImportant;
} BITMAPINFOHEADER;

ВАЖНО!
Изображение сохраняется построчно СНИЗУ-ВВЕРХ. Для хранения каждой строки выделяется кратное 4 количество байт. В незначащих байтах хранится мусор.
Старшему биту или тетраде соответствует самый левый пиксел. При хранении изображения True Color каждому пикселу соответствуют три последовательные байта, хранящие составляющие цвета B, G, R; (не R, G, B)
.

 

 

Есть вопросы ??? Задавайте их на форуме и вам наверняка ответят :)

Hosted by uCoz