четверг, 7 июня 2012 г.

Ребятам о форматах: Формат BMP - старый, но никем не отмененный


 Формат BMP (от слов BitMaP) является одной из форм представления растровой графики. Проще говоря, изображение представляется в виде матрицы прямоугольных точек, где каждая точка характеризуется тремя параметрами  -  x  координатой, y координатой и цветом. Формат BMP разрабатывался изначально двумя корпорациями Intel и Microsoft, и в то время был одинаков для обеих операционных систем Intel OS/2 Warp и Microsoft Windows 2.x. Однако далее фирма Microsoft расширила формат, расширив структуры (при этом сохранив как обратную, так и прямую совместимость для несжатых разновидностей) и добавив поддержку компрессии.  Интересно, что формат BMP - является  родным не только для операционных систем Windows и OS/2, но и для различных аппаратных устройств. Родным в том смысле, что все операции графического ввода - вывода на экран (принтер и на некоторые другие устройства) в конечном итоге осуществляются в этом формате. Под вывод BitMaP-в, оптимизируется архитектура большинства видеоадаптеров.     Для чтения и вывода в ОС Windows, предусмотрено много специальных функций и структур API (библиотека gdi32.dll и gdiplus.dll), которые помогают производить все необходимые операции на достаточно высоком логическом уровне.

Windows поддерживает работу с тремя битмапоподобными форматами *.bmp, *.rle, *.dib. *.rle - это сжатый битмап (как это следует из названия в формате RLE), полностью совместимый с bmp. *.dib - битмап версий Windows более чем 3.0. *.bmp - изначально предполагался быть совместимым с  Windows 2.x, в последствии вероятно от этого отказались и сделали его мультиформатным. Данные форматы внутренне ни чем не друг от друга не отличаются (т.е. являются, по сути, псевдонимами *.bmp) и были введены для явного указания формата сжатия.

Структура формата

    Перед описанием структуры уточню, что структура изображения в оперативной памяти повторяет файловую структуру, и все что верно для файла верно и для его образа в памяти.
Файл всегда состоит из трех частей: файлового заголовка, информация о файле и палитре, и блок данных.
Структура приведена в таблице ниже


Offset Bytes Name Объяснение
00h 2 bfType BMP сигнатура ("BM")
02h 4 bfSize Длина файла в Байтах
06h 2 ---------- Зарезервировано должно быть 0
08h 2 Зарезервировано должно быть 0
0Ah 4 bfOffs Offset Области данных
Расширенный Header Windows 3.x
0Eh 4 biSize Длина
12h 4 biWidth Ширина Bitmap-а в пикселях
16h 4 biHeight Высота Bitmap-а в пикселях
1Ah 2 BiPlanes Цветовые плоскости(должно быть1 )
1Ch 2 BiBit Количество битов на пиксель
1Eh 4 biCompr Тип сжатия (0 значит не сжато )
22h 4 biSizeIm Размер изображения в байтах
26h 4 BiXPels/m Горизонтальное разрешение в DPI
2Ah 4 BiYPels/m Вертикальное разрешение в DPI
2Eh 4 biClrUsed Количество используемых цветов
32h 4 BiClrImp. Количество важных цветов RGB_QUAD
36h N*4 Определение для n цветов с :
RgbBlue 1 Byte голубой интенситет
RgbGreen 1 Byte зелённый интенситет
RgbRed 1 Byte красный интенситет
RgbRes 1 Byte зарезервирован
Расширенный Header Windows 95
0Eh 4 Длина заголовка в байтах
12h 4 Ширина Bitmap-а в пикселях
16h 4 Высота Bitmap-а в пикселях
1Ah 2 Цветовые плоскости (должно быть1)
1Ch 2 Количество битов на пиксель
1Eh 4 Тип сжатия (0 значит не сжато )
22h 4 Размер изображения в байтах
26h 4 Горизонтальное разрешение в DPI
2Ah 4 Вертикальное разрешение в DPI
2Eh 4 Количество используемых цветов
32h 4 Количество важных цветов
дополнительные 4-поля BMP
36h 4 Маска красных частей Цвета
3Ah 4 Маска зелёных частей Цвета
3Eh 4 Маска зелёных частей Цвета
42h 4 Маска альфа канала
46h 4 Color Space Typ
4Ah 4 X-координата красного CIE-конца
4Eh 4 Y-координата красного CIE-конца
52h 4 Z-координата красного CIE-конца
56h 4 X-координата зелёного CIE-конца
5Ah 4 Y-координата зелёного CIE-конца
5Eh 4 Z-координата зелёного CIE-конца
62h 4 X-координата голубого CIE-конца
66h 4 Y-координата голубого CIE-конца
5Eh 4 Z-координата голубого CIE-конца
62h 4 Гамма красной координаты
66h 4 Гамма зелёной координаты
6Ah 4 Гамма голубой координаты


Комментариев нет:

Отправить комментарий