Какая информация записана в заголовке файла формата bmp
Структура BITMAPFILEHEADER, используемая для объявления заголовка растрового файла bmfHeader, имеет следующее определение:

Рисунок 1.1 — Структура BITMAPFILEHEADER
Поле bfType должно содержать ASCII-символы В и М, которые, разумеется, означают bitmap. Соответствующие шестнадцатеричные значения равны 0x42 и 0x4D. При любых других значениях этого поля файл не будет опознаваться Windows как растровое изображение. Cлово типа WORD размещается в памяти, начиная с младшего байта, поэтому, формируя заголовок, используется инструкция вида bfType = 0x4d42.
Поле bfSize содержит размер всего файла в байтах.
Поле bfOffbits задает байтовое смещение до начала растрового изображения. Если BMP-файл прочитан в память, то поле bfOffbits позволяет вычислить адрес начала массива aBitmapBits.
Заголовок информационного блока
После заголовка растрового файла следует заголовок информационного блока bmi Header,
в котором содержится информация о размерах и цветовом формате растра.
Соответствующая структура BITMAPINFOHEADER определена в файле wingdi. h:


Рисунок 1.2 — Структура заголовка
Поля biWidth и biHeight определяют ширину и высоту битового изображения.
Высота biHeight обычно является положительной величиной, но она может быть и отрицательной. Знак этого поля определяет порядок следования строк развертки в массиве пикселов. Положительное значение соответствует обратному порядку строк (снизу вверх), при котором первый пиксел массива является первым пикселом последней строки развертки изображения. Такие DIB-растры называют перевернутыми (bottom-up). Отрицательное значение соответствует прямому порядку строк (сверху вниз), и такие DIB-растры называют неперевернутыми (top-down). В большинстве BMP-файлов используется обратный порядок следования строк развертки. Поле bi Planes задает количество цветовых плоскостей для целевого графического устройства. В разных устройствах может использоваться различная структура строк развертки (с одной или несколькими цветовыми плоскостями).
Формат DIB поддерживает изображения только с одной плоскостью, поэтому поле biPlanes должно иметь единичное значение.
Поле biBitCount содержит количество битов, используемых для кодирования цвета одного пиксела. Иногда эту характеристику называют цветовой глубиной.
Палитра BMP
Цветовая таблица является массивом структур типа RGBQUAD. Этот тип определен следующим образом:

Рисунок 1.3 — Структура RGBQUAD
Поля структуры задают относительную интенсивность для синей, зеленой и красной составляющих цвета пиксела. Последнее поле в структуре является резервным. Обычно цветовая таблица используется в DIB-растрах, содержащих не более 256 цветов. В этом случае каждый пиксел массива aBitmapBits содержит индекс в цветовой таблице. Иногда цветовую таблицу включают и в DIB-растры формата True Color (Hi Color), что, на первый взгляд, кажется избыточным. Но это позволяет отображать указанные растры с требуемым качеством передачи цветов на устройствах, не поддерживающих формат True Color, а работающих с цветовой палитрой.
Количество элементов в цветовой таблице задается в поле biCLrUsed заголовка информационного блока. Если это поле имеет нулевое значение, то используется максимальное количество элементов для заданной цветовой глубины.
Данные изображения BMP
Пикселы изображения хранятся в массиве пикселов aBitmapBits. Если поле biHeight заголовка информационного блока содержит положительное значение, то строки развертки хранятся в обратном порядке, если же значение отрицательное — то в прямом порядке.
Пикселы упаковываются внутри строки развертки для экономии места.
Строки дополняются битами до границы двойного слова. Количество байтов на строку вычисляется по следующей формуле:
bytesPertine = ( (width * MtCount + 31) / 32) * 4:
где width — ширина изображения в пикселах, a bitCount — количество бит на пиксел.
Для несжатых растров DIB, у которых поле biCompression имеет значение BI_RGB, обращение к отдельным пикселам массива является простой операцией, которая реализуется достаточно эффективно. Массив пикселов aBitmapBits можно объявить как двумерный, что отражало бы семантику хранения в нем строк развертки изображения. Однако основные функции отображения DIB в контексте устройства получают в качестве аргумента адрес одномерного массива. Поэтому удобней объявлять aBitmapBits как одномерный массив, а прямой доступ к пикселам осуществлять посредством преобразования пары индексов «логического» двумерного массива в эквивалентный индекс «физического» одномерного массива.
Какая информация записана в заголовке файла формата BMP?
Как быстро выучить стихотворение наизусть? Запоминание стихов является стандартным заданием во многих школах.
Как научится читать по диагонали? Скорость чтения зависит от скорости восприятия каждого отдельного слова в тексте.
Как быстро и эффективно исправить почерк? Люди часто предполагают, что каллиграфия и почерк являются синонимами, но это не так.
Как научится говорить грамотно и правильно? Общение на хорошем, уверенном и естественном русском языке является достижимой целью.
Какая информация записана в заголовке файла формата bmp
На этом шаге мы рассмотрим структуру файла BMP .
К настоящему времени известно много форматов файлов для растровых изображений. Здесь мы рассмотрим один из самых популярных форматов, который обязан своей распространенностью операционной системе Windows — формат BMP .
Общая структура BMP -файла такова:
Рис.1. Общая структура BMP -файла
- WORD bfType — хранит символы «ВМ» . Это код формата.
- DWORD bfSize — общий размер файла в байтах.
- WORD bfReservedl — зарезервировано, пока что равно 0.
- WORD bfReserved2 — зарезервировано, пока что равно 0.
- DWORD bfOffBits — адрес битового массива в данном файле.
- DWORD biSize — размер заголовка, равен 40.
- LONG biWidth — ширина растра в пикселях.
- LONG biHeight — высота растра в пикселях.
- WORD biPlanes — должно быть равно 1.
- WORD biBitCount — бит на пиксель, может быть 1, 4, 8, 16, 24 или 32.
- DWORD biCompression — равно нулю.
- DWORD biSizeImage — размер в байтах битового массива растра.
- LONG biXPelsPerMeter — разрешение по X в пикселях на метр.
- LONG biYPelsPerMeter — разрешение по Y в пикселях на метр.
- DWORD biClrUsed — если равно 0, то используется максимальное число цветов.
- DWORD biClrImportant — равно 0, если biClrUsed = 0.
- BYTE rgbBlue — цветовая компонента В , от 0 до 255.
- BYTE rgbGreen — компонента G .
- BYTE rgbRed — компонента R .
- BYTE rgbReserved — не используется, равно 0.
Количество записей RGBQUAD равно количеству используемых цветов. Палитра отсутствует, если число бит на пиксел равно 24. Также палитра не нужна и для некоторых цветовых форматов 16 и 32 бит на пиксель.
- BYTE — однобайтовое целое число без знака.
- WORD — двухбайтовое целое число без знака.
- DWORD — четырехбайтовое целое число без знака.
- LONG — четырехбайтовое целое число со знаком.
После палитры (если она есть) в файле BMP записывается растр в виде битового (а точнее, байтового массива). В битовом массиве последовательно записываются байты строк растра. Количество байт в строке должно быть кратно четырем, поэтому если количество пикселей по горизонтали не соответствует такому условию, то справа в каждую строку дописывается некоторое число битов (выравнивание строк на границу двойного слова).
Сжатие изображений в файлах BMP отсутствует, однако подобный формат ( Device Independent Bitmap ) описания растровых изображений также используется и для файлов типа DIB , где применяются простейшие алгоритмы сжатия RLE (Run Length Encoding) . Алгоритмы RLE также используются и в других растровых графических форматах, например PCX .