Описание графического формата BMP 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание графического формата BMP



 

BMP - файл растрового изображения, используемый для хранения цифровых растровых изображений отдельно от устройства отображения.

Указанный формат файла растрового изображения состоит из структуры BITMAPFILEHEADER, за которой следует структура BITMAPINFOHEADER. Массив структур таблицы цветов следует за структурой заголовка информации о растровом изображении. За таблицей образцов следует второй массив индексов в таблице образцов (фактические данные растрового изображения). Рассмотрим заголовок файла (BITMAPFILEHEADER). Он описан следующим образом:

typedef struct tagBITMAPFILEHEADER

 {

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

 } BITMAPFILEHEADER, *PBITMAPFILEHEADER;

bfType - определяет тип файла. В случае bmp файлов он должен иметь значение BM

bfSize – это размер самого файла в байтах

bfReserved1 и bfReserved2 зарезервированы и должны быть нулями.

bfOffBits. Это один из самых важных полей в этой структуре. Он показывает, где начинается сам битовый массив относительно начала файла (или, как написано в MSDN, "от начала структуры BITMAPFILEHEADER"), который и описывает картинку.

 

Структура BITMAPINFO объединяет структуру BITMAPINFOHEADER и таблицу цветов, чтобы обеспечить полное определение размеров и цветов точечного изображения.

Таблица цветового индекса связывает цвет в виде индекса со структурой RGBGUAD, где каждый пиксель точечного рисунка. Индекс RGBGUAD для цвета самого левого пикселя является первыми n битами в массиве цветового индекса (где n — число битов, необходимое для указания всех структур rgbguad). Цвет следующего пикселя справа — это следующие n бит в массиве и т. д.

Рассмотрим структуру BITMAPINFOHEADER, которая объявлена так:

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, *PBITMAPINFOHEADER;

biSize - это размер самой структуры

biWidth - ширина растрового изображения в пикселях

biHeight - высота растрового изображения в пикселях

biPlanes - количество плоскостей для целевого устройства (данное значение должно быть равно 1)

biBitCount - оличество бит на один пиксель. Элемент biBitCount определяет количество битов, определяющих каждый пиксель, и максимальное количество цветов в растровом изображении. Этот элемент должен быть одним из следующих значений.

Таблица 1

Количество бит на один пиксель

Значение Определение
0 Биты на пиксель указываются форматом JPEG или PNG.
1 Растровое изображение состоит из 2 цветов, которые зависят от значения битва. Если бит равен 0, то пиксель отображается цветом первой записи в таблице bmiColors; если бит равен 1, то пиксель имеет цвет второй записи в массиве.
4 Максимальное количество цветов изображения - 16, которые зависят от значения 4-значимого битового слова, из которого состоит каждый пиксель изображения. Например, если первый байт в битовой карте равен 0x1F, то байт характеризует два пикселя. Первый пиксель содержит цвет из второй записи таблицы, а второй пиксель содержит цвет из шестнадцатой записи таблицы.
8 Максимальное количество цветов изображения - 256, которые зависят от значения 8-значимого битового слова, В этом случае каждый байт в массиве характеризует один пиксель.
16 Растровое изображение имеет максимум 65536 (2 ^ 16) цветов. Если BITMAPINFOHEADER biCompression равен BI_RGB, то BITMAPINFO bmiColors имеет значение NULL. Каждое битовое слово в растровой таблице характеризует один пиксель изображения. Относительные интенсивности цветов RGB палитры представлены пятью битами для каждого компонента цвета. Пять младших бит соответствуют синему цвету, за которыми  следуют пять зеленых и пять красных битов. Самый главный бит не используется. Если элемент BITMAPINFOHEADER соответствует BI_BITFIELDS, элемент bmiColors содержит три цветовых маски DWORD, определяющие красный, зеленый и синий компоненты каждого пикселя соответственно. Когда элементом является BI_BITFIELDS, биты, установленные в каждой маске DWORD, должны быть смежными и не должны перекрывать биты другой маски.
24 Максимальное количество цветов изображения - 16777216 (2^24) цветов, а член bmiColors BITMAPINFO имеет значение NULL. Каждый 3-байтовый триплет в растровом массиве представляет 8-битовое слово характеризующие относительную интенсивность синего, зеленого и красного цветов соответственно для одного пикселя. Таблица цветов bmiColors используется для точной настройки цветов, используемых в устройствах на основе палитр, и должна содержать количество записей, заданное членом biClrUsed BITMAPINFOHEADER.  
32 Максимальное количество цветов изображения - 2^32 цвета. Если параметр biCompression в BITMAPINFOHEADER равен BI_RGB, то параметр bmiColors в BITMAPINFO принимает значение NULL. Каждый DWORD в растровом массиве представляет относительную интенсивность синего, зеленого и красного цветов для одного пикселя. Значение для синего - 8 младших битов, за которыми следуют 8 бит для зеленого и красного; старший байт не используется в каждом DWORD. Таблица цветов bmiColors используется для оптимизации цветов, используемых в устройствах на основе поддонов, и должна содержать количество записей, заданное BITMAPINFOHEADER. Если элемент BITMAPINFOHEADER соответствует BI_BITFIELDS, элемент bmiColors содержит три цветовых маски DWORD, определяющие красный, зеленый и синий компоненты каждого пикселя соответственно. Когда элементом является BI_BITFIELDS, биты, установленные в каждой маске DWORD, должны быть смежными и не должны перекрывать биты другой маски.

 

biCompression - тип сжатия для сжатого растрового изображения. Этот элемент может иметь одно из следующих значений.

Таблица 2

Значения параметра biCompression

Значение Определение
BI_RGB Несжатый формат.
BI_RLE8 Формат RLE растрового изображения с 8 битами в 1 пикселе
BI_RLE4 Формат RLE растрового изображения с 4 битами в 1 пикселе
BI_BITFIELDS Указывает, что растровое изображение не сжато и что таблица цветов состоит из трех цветовых битовых слов, определяющие красный, зеленый и синий компоненты каждого пикселя соответственно.
BI_JPEG Указывает, что изображение является изображением в формате JPEG.
BI_PNG Указывает, что изображение является изображением в формате PNG.
BI_RLE4 Формат RLE растрового изображения с 8 битами в 1 пикселе
BI_BITFIELDS Указывает, что растровое изображение не сжато и что таблица цветов состоит из трех цветовых битовых слов, определяющие красный, зеленый и синий компоненты каждого пикселя соответственно.
BI_JPEG Указывает, что изображение является изображением в формате JPEG.

 

biSizeImage - размер изображения в байтах. Для растровых изображений BI_RGB это значение может быть равно нулю. Если biCompression принимает значение BI_JPEG или BI_PNG, то biSizeImage указывает размер буфера изображений JPEG или PNG соответственно.

biXPelsPerMeter - горизонтальное разрешение, в пикселях на метр, целевого устройства для растрового изображения. Приложение может использовать это значение для выбора растрового изображения из группы ресурсов, которое наилучшим образом соответствует характеристикам текущего устройства.biYPelsPerMeter - вертикальное разрешение, в пикселях на метр, целевого устройства для растрового изображения.

biClrUsed - число индексов цвета в таблице цветов, фактически используемых растровым изображением. Если это значение равно нулю, то битовая карта использует максимальное количество цветов, которые соответствуют значению biBitCount для режима сжатия, указанного в bicompression. Если biClrUsed отличен от нуля и biBitCount меньше 16, biClrUsed - принимает фактическое количество цветов, к которым обращается графический механизм или драйвер устройства. Если biBitCount равно 16 или больше, biClrUsed указывает размер таблицы цветов, используемой для оптимизации производительности системных цветовых палитр. Если значение biBitCount равно 16 или 32, оптимальная цветовая гамма начинается сразу после трех масок битовых слов.biClrImportant - количество цветовых индексов, необходимых для отображения растрового изображения. Если это значение равно нулю, требуются все цвета[1].

 

Метод наименьшего значащего бита (LSB)

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

Принцип работы стеганографического метода заключается в следующем.

Как описано ранее, в формате BMP изображение сохраняется как матрица значений цветового тона для каждой точки захваченного изображения. Если каждый компонент пространства RGB (также называемый цветовыми каналами) хранится в одном байте, он может принимать значения от 0 до 255 включительно, что соответствует 24-битной глубине цвета.

Допустим, имеется 24-битное изображение. Пиксель кодируется 3 байтами и содержит значения канала RGB. Изменяя младший бит, мы меняем значение байта на единицу. Особенность человеческого зрения в том, что оно плохо распознает мелкие цветовые колебания. В случае 24-битного цвета изменение в каждом из трех каналов наименее значимого бита (то есть самого правого бита) приводит к изменению менее чем на 1% интенсивности этой точки[2].

 



Поделиться:


Последнее изменение этой страницы: 2021-07-19; просмотров: 66; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.123.238 (0.009 с.)