Расширение имени файла | .bmp , .dib |
---|---|
Интернет-медиа type | image / bmp . image / x-bmp |
Код типа | 'BMP' . 'BMPf' . 'BMPp' |
Универсальный идентификатор типа (UTI) | com.microsoft.bmp |
Разработано | Microsoft Corporation |
Тип формата | Растровая графика |
Открытый формат ? | OSP для WMF |
Формат файла BMP, также известный как файл растрового изображения, независимый от устройства формат файла растрового изображения (DIB) и растровое изображение, представляет собой растровую графику формат файла изображения, используемый для хранения битовой карты цифровых изображений, независимо от устройства отображения (например, графики адаптер ), особенно в операционных системах Microsoft Windows и OS / 2.
Формат файла BMP может хранить двумерные цифровые изображения, как монохромные, так и цветные, с различной глубиной цвета и, необязательно, с сжатие данных, альфа-каналы и цветовые профили. Спецификация метафайла Windows (WMF) охватывает формат файла BMP.
Microsoft определила конкретное представление цветных растровых изображений с разной глубиной цвета в качестве помощи для обмена растровые изображения между устройствами и приложениями с различными внутренними представлениями. Они назвали эти независимые от устройства растровые изображения или DIB, а формат файла для них называется форматом файла DIB или форматом файла изображения BMP.
Согласно поддержке Microsoft:
Независимое от устройства растровое изображение (DIB) - это формат, используемый для определения независимых от устройства растровых изображений с различным цветовым разрешением. Основная цель DIB - разрешить перенос растровых изображений с одного устройства на другое (отсюда и независимая от устройства часть имени). DIB - это внешний формат, в отличие от зависящего от устройства растрового изображения, которое появляется в системе как растровый объект (созданный приложением...). DIB обычно переносится в метафайлах (обычно с использованием функции StretchDIBits ()), файлах BMP и буфере обмена (формат данных CF_DIB).
В следующих разделах подробно обсуждаются данные, хранящиеся в файле BMP или DIB. Это стандартный формат файла BMP. Некоторые приложения создают файлы растровых изображений, которые не соответствуют документации Microsoft. Кроме того, используются не все поля; в этих неиспользуемых полях будет найдено значение 0.
Файл растрового изображения состоит из структур фиксированного размера (заголовков), а также структур переменного размера, появляющихся в заранее определенной последовательности. В файле может появиться множество различных версий некоторых из этих структур из-за длительного развития этого формата файла.
Ссылаясь на схему 1, файл растрового изображения состоит из структур в следующем порядке:
Имя структуры | Необязательно | Размер | Назначение | Комментарии |
---|---|---|---|---|
Заголовок файла растрового изображения | Нет | 14 байтов | Для хранения общей информации о файле растрового изображения | Нет требуется после загрузки файла в память |
Заголовок DIB | Нет | Фиксированный размер. (существует 7 различных версий) | Для хранения подробной информации о растровое изображение и определить формат пикселей | Сразу после заголовка файла Bitmap |
Дополнительные битовые маски | Да | 3 или 4 DWORD. (12 или 16 байтов) | Для определения формата пикселей | Присутствует только в том случае, если заголовок DIB - это BITMAPINFOHEADER, а для члена метода сжатия установлено значение BI_BITFIELDS или BI_ALPHABITFIELDS |
Таблица цветов | Полу-необязательный | Переменный размер | Для определения цветов, используемых данными растрового изображения (массив пикселей) | Обязательно для глубины цвета ≤ 8 бит |
Gap1 | Да | Переменный размер | Выравнивание структуры | Артефакт смещения файла до массива пикселей в заголовке файла Bitmap |
Массив пикселей | Нет | Переменный размер | Для определения фактических значений пикселей | Формат пикселей определяется заголовком DIB или дополнительными битовыми масками. Каждая строка в массиве пикселей дополняется размером, кратным 4 байтам, размером |
Gap2 | Да | Переменный размер | Выравнивание структуры | артефакт поля смещения данных профиля ICC в заголовке DIB |
Цветовой профиль ICC | Да | Переменный размер | Для определения цветового профиля для управления цветом | Также может содержать путь к внешнему файлу, содержащему цветовой профиль. При загрузке в память как «неупакованный DIB» он располагается между таблицей цветов и Gap1. |
Файл растрового изображения, загруженный в память, становится структурой данных DIB - важным компонентом API Windows GDI. Структура данных DIB в памяти почти такая же, как и в формате файла BMP, но не содержит 14-байтового заголовка файла растрового изображения и начинается с заголовка DIB. Для DIB, загруженных в память, таблица цветов может также состоять из 16-битных записей, которые составляют индексы для текущей реализованной палитры (дополнительный уровень косвенности), вместо явных определений цветов RGB. Во всех случаях массив пикселей должен начинаться с адреса памяти, кратного 4 байтам. В неупакованных DIB, загруженных в память, необязательные данные цветового профиля должны располагаться сразу после таблицы цветов и перед зазором1 и массивом пикселей (в отличие от диаграммы 1).
Когда размер промежутка 1 и промежутка 2 равен нулю, структура данных DIB в памяти обычно упоминается как «упакованный DIB» и может упоминаться с помощью одного указателя, указывающего на начало заголовка DIB. Во всех случаях массив пикселей должен начинаться с адреса памяти, кратного 4 байтам. В некоторых случаях может потребоваться настроить количество записей в таблице цветов, чтобы заставить адрес памяти массива пикселей быть кратным 4 байтам. Для «упакованных DIB», загруженных в память, необязательные данные цветового профиля должны немедленно следовать за массивом пикселей, как показано на диаграмме diag. 1 (с gap1 = 0 и gap2 = 0).. «Упакованные DIB» требуются для функций Windows API буфера обмена, а также для некоторых шаблонных кистей и функций ресурсов Windows.
Этот блок байтов находится в начале файла и используется для идентификации файла. Типичное приложение сначала читает этот блок, чтобы убедиться, что файл на самом деле является файлом BMP и не поврежден. Первые 2 байта формата файла BMP - это символ «B», затем символ «M» в кодировке ASCII. Все целочисленные значения сохраняются в формате little-endian (т.е. сначала младший байт).
Смещение в шестнадцатеричном формате | Смещение в десятичном формате | Размер | Назначение |
---|---|---|---|
00 | 0 | 2 байта | Поле заголовка используется для идентификации файл BMP и DIB имеет формат 0x42 0x4D в шестнадцатеричном формате, то же самое, что и BM в ASCII. Возможны следующие записи:
|
02 | 2 | 4 байта | Размер файла BMP в байтах |
06 | 6 | 2 байта | Зарезервировано; фактическое значение зависит от приложения, которое создает изображение, при создании вручную может быть 0 |
08 | 8 | 2 байта | Зарезервировано; фактическое значение зависит от приложения, которое создает изображение, если оно создано вручную, может быть 0 |
0A | 10 | 4 байта | Смещение, то есть начальный адрес байта, в котором находятся данные растрового изображения. (массив пикселей) можно найти. |
Этот блок байтов сообщает приложению подробную информацию об изображении, которая будет использоваться для отображения изображения на экране. Блок также соответствует заголовку, используемому внутри Windows и OS / 2, и имеет несколько различных вариантов. Все они содержат поле dword (32-битное) с указанием их размера, чтобы приложение могло легко определить, какой заголовок используется в изображении. Причина того, что существуют разные заголовки, заключается в том, что Microsoft несколько раз расширяла формат DIB. Новые расширенные заголовки могут использоваться с некоторыми функциями GDI вместо старых, обеспечивая большую функциональность. Поскольку GDI поддерживает функцию загрузки файлов растровых изображений, типичные приложения Windows используют эту функцию. Одним из следствий этого является то, что для таких приложений поддерживаемые ими форматы BMP соответствуют форматам, поддерживаемым запущенной версией Windows. См. Дополнительную информацию в таблице ниже.
Размер | Имя заголовка | Поддержка ОС | Возможности | Автор |
---|---|---|---|---|
12 | BITMAPCOREHEADER. OS21XBITMAPHEADER | Windows 2.0 или новее. OS / 2 1.x | ||
64 | OS22XBITMAPHEADER | OS / 2 BITMAPCOREHEADER2 | Добавляет полутоновое изображение. Добавляет RLE и Huffman 1D сжатие. | |
16 | OS22XBITMAPHEADER | Этот вариант предыдущего заголовка содержит только первые 16 байтов, а остальные байты считаются нулевыми значениями. Примером такого случая является рисунок pal8os2v2-16.bmp из BMP Suite. | ||
40 | BITMAPINFOHEADER | Windows NT, 3.1x или более поздняя версия | Добавляет 16 форматы bpp и 32 bpp. Добавляет сжатие RLE. | |
52 | BITMAPV2INFOHEADER | Недокументированное | Добавляет битовые маски RGB. | Adobe Photoshop |
56 | BITMAPV3INFOHEADER | Официально не документировано, но эта документация была размещена на форумах Adobe сотрудником Adobe с заявлением, что стандарт был когда-то ранее включалось в официальную документацию MS. | Добавляет альфа-канал битовую маску. | Adobe Photoshop |
108 | BITMAPV4HEADER | Windows NT 4.0, 95 или новее | Добавляет тип цветового пространства и гамма-коррекцию | |
124 | BITMAPV5HEADER | Windows NT 5.0, 98 или новее | Добавляет цветовые профили ICC | GIMP |
Смещение (шестнадцатеричное) | Смещение (десятичное) | Размер (байты) | OS / 2 1.x BITMAPCOREHEADER |
---|---|---|---|
0E | 14 | 4 | Размер этого заголовка (12 байтов) |
12 | 18 | 2 | Ширина битовой карты в пикселей (16 бит без знака) |
14 | 20 | 2 | Высота растрового изображения в пикселях (16 бит без знака) |
16 | 22 | 2 | Количество цветовых плоскостей, должно быть 1 |
18 | 24 | 2 | Число бит на пиксель |
Растровые изображения OS / 2 1.x не сжаты и не могут быть 16 или 32 бит на пиксель. |
BITMAPCOREHEADER Windows 2.x отличается от BITMAPCOREHEADER OS / 2 1.x (показано в таблице выше) одна деталь, что поля ширины и высоты изображения являются целыми числами со знаком, а не без знака.
Версии после BITMAPCOREHEADER добавляют поля только в конец заголовка предыдущей версии. Например: BITMAPV2INFOHEADER добавляет поля в BITMAPINFOHEADER, а BITMAPV3INFOHEADER добавляет поля в BITMAPV2INFOHEADER.
Интегрированный альфа-канал был представлен в недокументированном BITMAPV3INFOHEADER и в документированном BITMAPV4HEADER (начиная с Windows 95 ) и используется в Windows XP система входа и темы, а также Microsoft Office (с версии 2000); он поддерживается некоторым программным обеспечением, таким как Adobe Photoshop начиная с версии 7 и Adobe Flash начиная с версии MX 2004 (тогда известный как Macromedia Flash). Он также поддерживается GIMP, Google Chrome, Microsoft PowerPoint и Microsoft Word.
. В целях совместимости большинство приложений используют старые заголовки DIB. для сохранения файлов. Поскольку OS / 2 больше не поддерживается после Windows 2000, на данный момент распространенным форматом Windows является заголовок BITMAPINFOHEADER. Его описание см. В следующей таблице. Все значения сохраняются как целые числа без знака, если явно не указано иное.
Смещение (шестнадцатеричное) | Смещение (десятичное) | Размер (байты) | Windows BITMAPINFOHEADER |
---|---|---|---|
0E | 14 | 4 | размер этого заголовка в байтах (40) |
12 | 18 | 4 | ширина битовой карты в пикселях (целое число со знаком) |
16 | 22 | 4 | высота битовой карты в пикселях (целое число со знаком) |
1A | 26 | 2 | количество цветовых плоскостей (должно быть 1) |
1C | 28 | 2 | количество битов на пиксель, которое представляет собой глубину цвета изображения. Типичные значения - 1, 4, 8, 16, 24 и 32. |
1E | 30 | 4 | используемый метод сжатия. В следующей таблице приведен список возможных значений |
22 | 34 | 4 | размера изображения. Это размер необработанных данных растрового изображения; для растровых изображений BI_RGB может быть задан фиктивный 0. |
26 | 38 | 4 | горизонтальное разрешение изображения. (пикселей на метр, целое число со знаком) |
2A | 42 | 4 | вертикальное разрешение изображения. (пикселей на метр, целое число со знаком) |
2E | 46 | 4 | количество цветов в цветовой палитре, или от 0 по умолчанию до 2 |
32 | 50 | 4 | количество используемых важных цветов, или 0, когда каждый цвет является важный; обычно игнорируется |
Метод сжатия (смещение 30) может быть:
Значение | Определяется по | Метод сжатия | Комментарии |
---|---|---|---|
0 | BI_RGB | нет | Наиболее часто встречается |
1 | BI_RLE8 | RLE 8 бит / пиксель | Может использоваться только с растровыми изображениями 8 бит / пиксель |
2 | BI_RLE4 | RLE 4 бит / пиксель | Может использоваться только с растровыми изображениями 4 бит / пиксель |
3 | BI_BITFIELDS | OS22XBITMAPHEADER : Huffman 1D | BITMAPV2INFOHEADER: маски битовых полей RGB,. BITMAPV3INFOHEADER + : RGBA |
4 | BI_JPEG | OS22XBITMAPHEADER : RLE-24 | BITMAPV4INFOHEADER + : JPEG изображение для печати <30416>BI_PNG BITMAPV4INFOHEADER + : PNG изображение для печати |
6 | BI_ALPHABITFIELDS | маски битовых полей RGBA | только Windows CE 5.0 с.NET 4.0 или позднее |
11 | BI_CMYK | нет | только метафайл Windows CMYK |
12 | BI_CMYKRLE8 | Только RLE-8 | Метафайл Windows CMYK |
13 | BI_CMYKRLE4 | RLE-4 | только Метафайл Windows CMYK |
OS / 2 2.x OS22XBITMAPHEADER (BITMAPINFOHEADER2 в документации IBM) содержит 24 дополнительных байта:
Смещение (шестнадцатеричное) | Смещение (десятичное) | Размер (байты) | OS / 2 OS22XBITMAPHEADER (BITMAPINFOHEADER2) |
---|---|---|---|
36 | 54 | 2 | Перечислимое значение, определяющее единицы для горизонтального и вертикального разрешения (смещения 38 и 42). Единственное определенное значение - 0, что означает количество пикселей на метр |
38 | 56 | 2 | Padding. Игнорируется и должно быть нулевым |
3A | 58 | 2 | Перечислимое значение, указывающее направление, в котором биты заполняют битовую карту. Единственное определенное значение - 0, что означает, что начало координат находится в нижнем левом углу. Биты заполняются слева направо, затем снизу вверх. Обратите внимание, что растровые изображения Windows (которые не включают это поле) также могут указывать начало левого верхнего угла (биты заполняются слева направо, затем сверху вниз) с использованием отрицательного значения для высоты изображения. |
3C | 60 | 2 | Перечисляемое значение, указывающее алгоритм полутонового изображения, который следует использовать при визуализации изображения. |
40 | 64 | 4 | Параметр 1 передачи полутонов (см. Ниже) |
44 | 68 | 4 | Параметр 2 передачи полутонов (см. Ниже) |
48 | 72 | 4 | Перечислимое значение, указывающее кодировку цвета для каждой записи в таблице цветов. Единственное определенное значение - 0, что означает RGB. |
4C | 76 | 4 | Идентификатор, определяемый приложением. Не используется для рендеринга изображения |
Алгоритм полутонового изображения (смещение 60) может быть:
Значение | Алгоритм полутонового изображения | Комментарии |
---|---|---|
0 | нет | Наиболее распространенный |
1 | Распространение ошибок | Параметр полутонового изображения 1 (смещение 64) представляет собой процент демпфирования ошибки. 100 означает отсутствие демпфирования. 0 означает, что ошибки не распространяются. |
2 | PANDA: Алгоритм обработки для получения некодированных документов | Параметры полутонового изображения 1 и 2 (смещения 64 и 68 соответственно) представляют размеры X и Y в пикселях соответственно используемый образец полутонового изображения |
3 | Супер-круг | Параметры полутонового изображения 1 и 2 (смещения 64 и 68 соответственно) представляют размеры X и Y в пикселях, соответственно, используемого образца полутонового изображения |
Цветовая таблица (палитра) находится в файле изображения BMP сразу после заголовка файла BMP, заголовка DIB (и после дополнительных трех красных, зеленых и синих битовых масок, если заголовок BITMAPINFOHEADER с BI_BITFIELDS или Используется опция BI_ALPHABITFIELDS). Следовательно, его смещение - это размер BITMAPFILEHEADER плюс размер заголовка DIB (плюс необязательные 12 байтов для трех битовых масок).. Примечание. В Windows CE Заголовок BITMAPINFOHEADER может использоваться с параметром BI_ALPHABITFIELDS в элементе biCompression.
Количество записей в палитре равно 2 (где n - количество бит на пиксель) или меньшему числу, указанному в заголовке ( в формате заголовка OS / 2 BITMAPCOREHEADER поддерживается только полноразмерная палитра). В большинстве случаев каждая запись в таблице цветов занимает 4 байта в следующем порядке: синий, зеленый, красный, 0x00 (исключения см. Ниже). Это индексируется в BITMAPINFOHEADER под функцией biBitCount.
Таблица цветов - это блок байтов (таблица), в котором перечислены цвета, используемые изображением. Каждый пиксель в индексированном цветном изображении описывается числом битов (1, 4 или 8), которое является индексом одного цвета, описанного в этой таблице. Целью цветовой палитры в индексированных цветных растровых изображениях является информирование приложения о фактическом цвете, которому соответствует каждое из этих значений индекса. Назначение таблицы цветов в неиндексированных (непалитровых) растровых изображениях состоит в том, чтобы перечислить цвета, используемые растровым изображением, для целей оптимизации на устройствах с ограниченными возможностями отображения цвета и для облегчения будущего преобразования в различные форматы пикселей и палитру.
Цвета в таблице цветов обычно задаются в формате 4 байта на запись RGBA32. Таблица цветов, используемая с OS / 2 BITMAPCOREHEADER, использует 3-байтовый формат RGB24 для каждой записи. Для DIB, загруженных в память, таблица цветов может дополнительно состоять из 2-байтовых записей - эти записи представляют собой индексы для текущей реализованной палитры вместо явных определений цветов RGB.
Microsoft не запрещает наличие допустимой битовой маски альфа-канала в BITMAPV4HEADER и BITMAPV5HEADER для индексированных цветных изображений 1bpp, 4bpp и 8bpp, что указывает на то, что записи таблицы цветов могут также указывать альфа-компонент с использованием формата 8.8.8. [0-8]. [0-8] через член RGBQUAD.rgbReserved. Однако некоторые версии документации Microsoft запрещают эту функцию, заявляя, что член RGBQUAD.rgbReserved «должен быть равен нулю».
Как упоминалось выше, таблица цветов обычно не используется, когда пиксели имеют формат 16 бит на пиксель (16 бит на пиксель) (и выше); в этих файлах растровых изображений обычно нет записей таблицы цветов. Однако в документации Microsoft (на веб-сайте MSDN по состоянию на 16 ноября 2010 г.) указано, что для 16 бит на пиксель (и выше) может присутствовать таблица цветов для хранения списка цветов, предназначенных для оптимизации на устройствах с ограниченными возможностями цветного отображения., в то время как он также указывает, что в таких случаях в этой таблице цветов отсутствуют элементы индексированной палитры. Это может показаться противоречием, если не делается различий между обязательными записями палитры и дополнительным списком цветов.
Биты, представляющие пиксели битовой карты, упакованы в строки. Размер каждой строки округляется до кратного 4 байтам (32-битное DWORD ) путем заполнения.
Для изображений с высотой выше 1 несколько заполненных строк сохраняются последовательно, образуя массив пикселей.
Общее количество байтов, необходимых для хранения одной строки пикселей, можно рассчитать следующим образом:
Общее количество байтов, необходимых для хранения массива пикселей в изображении nбит на пиксель (bpp), с 2 цветов, можно рассчитать с учетом эффекта округления размера каждой строки до кратного 4 байтам, как показано ниже:
Массив пикселей представляет собой блок 32-битных DWORD, который описывает изображение пиксель за пикселем. Обычно пиксели хранятся «снизу вверх», начиная с нижнего левого угла, идя слева направо, а затем построчно снизу вверх. Если не используется BITMAPCOREHEADER, несжатые растровые изображения Windows также могут храниться сверху вниз, если значение высоты изображения отрицательное.
В исходной DIB OS / 2 единственными четырьмя допустимыми значениями глубины цвета были 1, 4, 8 и 24 бита на пиксель (bpp). Современные заголовки DIB допускают форматы пикселей с 1, 2, 4, 8, 16, 24 и 32 битами на пиксель (bpp). GDI + также допускает 64 бита на пиксель.
Байты заполнения ( не обязательно 0) должен быть добавлен в конец строк, чтобы увеличить длину строк, кратную четырем байтам. Когда массив пикселей загружается в память, каждая строка должна начинаться с адреса памяти, кратного 4. Это ограничение адреса / смещения является обязательным только для массивов пикселей, загруженных в память. В целях хранения файлов только размер каждой строки должен быть кратен 4 байтам, а смещение файла может быть произвольным. 24-битное растровое изображение с Width = 1 будет иметь 3 байта данных на строку (синий, зеленый, красный) и 1 байт заполнения, тогда как Width = 2 будет иметь 6 байтов данных и 2 байта заполнения, Width = 3 будет иметь 9 байтов данных и 3 байта заполнения, а ширина = 4 будет иметь 12 байтов данных без заполнения.
Чтобы разрешить неоднозначность того, какие биты определяют, какие выборки, заголовки DIB предоставляют определенные значения по умолчанию, а также определенные BITFIELDS, которые являются битовыми масками, которые определяют принадлежность конкретной группы битов в пикселе к конкретному каналу . Следующая диаграмма описывает этот механизм:
Диаг. 2 - Механизм BITFIELDS для 32-битного пикселя, представленного в обозначении длины выборки RGBAXПоля выборки, определенные битовыми масками BITFIELDS, должны быть смежными и неперекрывающимися, но порядок полей выборок может быть произвольным. Наиболее распространенный порядок полей: альфа, синий, зеленый, красный (от MSB к LSB). Красная, зеленая и синяя битовые маски действительны только тогда, когда элемент сжатия заголовка DIB установлен на BI_BITFIELDS. Альфа-битовая маска действительна всякий раз, когда она присутствует в заголовке DIB или когда элемент сжатия заголовка DIB установлен на BI_ALPHABITFIELDS (только Windows CE ).
Диаг. 3 - Формат пикселей с альфа-каналом для 16-битного пикселя (в обозначении длины образца RGBAX), фактически созданного Adobe Photoshop Все возможные форматы пикселей в подтипах видео DIBМеханизм BITFIELD, описанный выше, позволяет определять десятки тысяч различных форматов пикселей, однако на практике используются только некоторые из них, все форматы палитры RGB8, RGB4 и RGB1 (отмечены желтым в таблице выше, dshow.h
MEDIASUBTYPE names) и:
RGBAX | Подтип RGB | RGBAX | Подтип ARGB |
---|---|---|---|
8.8.8.0.8 | RGB32 | 8.8.8.8.0 | ARGB32 |
10.10.10.2.0 | A2R10G10B10 | ||
8.8.8.0.0 | RGB24 | 10.10.10.2.0 | A2B10G10R10 |
5.6.5.0.0 | RGB565 | 4.4.4.4. 0 | ARGB4444 |
5.5.5.0.1 | RGB555 | 5.5.5.1.0 | ARGB1555 |
Битовое поле | Смещение | Биты A2R10G 10B10 | Биты A2B10G10R10 | ||||
---|---|---|---|---|---|---|---|
Красный | 36h | 00 00 F0 3F | LE: 3FF00000 | 20 …29 | FF 03 00 00 | LE : 000003FF | 0 …9 |
Зеленый | 3Ah | 00 FC 0F 00 | LE: 000FFC00 | 10 …19 | 00 FC 0F 00 | LE: 000FFC00 | 10 …19 |
Синий | 3Eh | FF 03 00 00 | LE: 000003FF | 0 …9 | 00 00 F0 3F | LE: 3FF00000 | 20 …29 |
Alpha | 42h | 00 00 00 C0 | LE: C0000000 | 30 …31 | 00 00 00 C0 | LE: C0000000 | 30 …31 |
В версии 2.1.4 FFmpeg поддерживал (в своей терминологии) форматы пикселей BMP bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, pal8 и monob; т.е. bgra был единственным поддерживаемым форматом пикселей с прозрачностью.
Пример 1 растрового изображения 2 × 2 пикселя с кодировкой 24 бит / пиксельНиже приведен пример 24-битное растровое изображение 2 × 2 пикселя (заголовок Windows DIB BITMAPINFOHEADER) с форматом пикселей RGB24.
Смещение | Размер | Шестнадцатеричное значение | Значение | Описание |
---|---|---|---|---|
Заголовок BMP | ||||
0h | 2 | 42 4D | "BM" | Поле идентификатора (42h, 4Dh) |
2h | 4 | 46 00 00 00 | 70 байтов (54 + 16) | Размер файла BMP (54 байта заголовка + 16 байтов данных) |
6h | 2 | 00 00 | Не используется | Зависит от приложения |
8h | 2 | 00 00 | Не используется | Зависит от приложения |
Ah | 4 | 36 00 00 00 | 54 байта (14 + 40) | Смещение массива пикселей (данные растрового изображения) можно найти |
Заголовок DIB | ||||
Eh | 4 | 28 00 00 00 | 40 байтов | Количество байтов в заголовке DIB (с этого момента) |
12h | 4 | 02 00 00 00 | 2 пикселя (порядок слева направо) | Ширина растрового изображения в пикселях |
16h | 4 | 02 00 00 00 | 2 пикселей (порядок снизу вверх) | Высота растрового изображения в пикселях. Положительно для порядка пикселей снизу вверх. |
1Ah | 2 | 01 00 | 1 плоскость | Количество используемых цветовых плоскостей |
1Ch | 2 | 18 00 | 24 бита | Число бит на пиксель |
1Eh | 4 | 00 00 00 00 | 0 | BI_RGB, сжатие массива пикселей не используется |
22h | 4 | 10 00 00 00 | 16 байтов | Размер необработанных данных растрового изображения (включая заполнение) |
26h | 4 | 13 0B 00 00 | 2835 пикселей / метр по горизонтали | Разрешение печати изображения,. 72 DPI × 39,3701 дюйма на метр дает 2834,6472 |
2Ah | 4 | 13 0B 00 00 | 2835 пикселей / метр по вертикали | |
2Eh | 4 | 00 00 00 00 | 0 цветов | Количество цветов в палитре |
32h | 4 | 00 00 00 00 | 0 важных цветов | 0 означает, что все цвета важны |
Начало массива пикселей (данные растрового изображения) | ||||
36h | 3 | 00 00 FF | 0 0 255 | Красный, пиксель (0,1) |
39h | 3 | FF FF FF | 255 255 255 | Белый, пиксель (1,1) |
3Ch | 2 | 00 00 | 0 0 | Заполнение для 4-байтового выравнивания (может быть значением, отличным от нуля) |
3Eh | 3 | FF 00 00 | 255 0 0 | Синий, пиксель (0,0) |
41h | 3 | 00 FF 00 | 0 255 0 | Зеленый, Пиксель (1,0) |
44h | 2 | 00 00 | 0 0 | Заполнение для 4-байтового выравнивания (может быть другое значение чем ноль) |
Ниже приведен пример 32-битного пикселя 4 × 2 растровое изображение со значениями непрозрачности в альфа-канале (Windows DIB Header BITMAPV4HEADER) с форматом пикселей ARGB32.
Смещение | Размер | Шестнадцатеричное значение | Значение | Описание |
---|---|---|---|---|
Заголовок BMP | ||||
0h | 2 | 42 4D | "BM" | Поле идентификатора (42h, 4Dh) |
2h | 4 | 9A 00 00 00 | 154 байта (122 + 32) | Размер файла BMP |
6h | 2 | 00 00 | Не используется | Зависит от приложения |
8h | 2 | 00 00 | Не используется | Зависит от приложения |
Ah | 4 | 7A 00 00 00 | 122 байта (14 + 108) | Смещение, где находится массив пикселей (данные растрового изображения) |
Заголовок DIB | ||||
Eh | 4 | 6C 00 00 00 | 108 байтов | Количество байтов в заголовке DIB (с этого момента) |
12h | 4 | 04 00 00 00 | 4 пикселя (порядок слева направо) | Ширина растрового изображения в пикселях |
16h | 4 | 02 00 00 00 | 2 пикселя (порядок снизу вверх) | Высота растрового изображения в пикселях |
1Ah | 2 | 01 00 | 1 плоскость | Количество используемых цветовых плоскостей |
1Ch | 2 | 20 00 | 32 бита | Число битов на пиксель |
1Eh | 4 | 03 00 00 00 | 3 | BI_BITFIELDS, сжатие массива пикселей не используется |
22h | 4 | 20 00 00 00 | 32 байта | Размер необработанных данных растрового изображения (включая заполнение) |
26h | 4 | 13 0B 00 00 | 2835 pixels/metre horizontal | Print resolution of the image,. 72 DPI × 39.3701 inches per metre yields 2834.6472 |
2Ah | 4 | 13 0B 00 00 | 2835 pixels/metre vertical | |
2Eh | 4 | 00 00 00 00 | 0 colors | Number of colors in the palette |
32h | 4 | 00 00 00 00 | 0 important colors | 0 means all colors are important |
36h | 4 | 00 00 FF 00 | 00FF0000 in big-endian | Red channel bit mask (valid because BI_BITFIELDS is specified) |
3Ah | 4 | 00 FF 00 00 | 0000FF00 in big-endian | Green channel bit mask ( valid because BI_BITFIELDS is specified) |
3Eh | 4 | FF 00 00 00 | 000000FF in big-endian | Blue channel bit mask (valid because BI_BITFIELDS is specified) |
42h | 4 | 00 00 00 FF | FF000000 in big-endian | Alpha chan nel bit mask |
46h | 4 | 20 6E 69 57 | little-endian "Win " | LCS_WINDOWS_COLOR_SPACE |
4Ah | 24h | 24h* 00...00 | CIEXYZTRIPLE Конечные точки цветового пространства | Не используются для LCS «Win » или «sRGB " |
6Eh | 4 | 00 00 00 00 | 0 Красная Гамма | Не используется для LCS «Win » или «sRGB " |
72h | 4 | 00 00 00 00 | 0 Зеленая гамма | Не используется для LCS «Win » или «sRGB " |
76h | 4 | 00 00 00 00 | 0 Голубая гамма | Не используется для LCS» Win "или" sRGB " |
Начало массива пикселей (данные растрового изображения) | ||||
7Ah | 4 | FF 00 00 7F | 255 0 0 127 | Синий (Альфа: 127), Пиксель (1,0) |
7Eh | 4 | 00 FF 00 7F | 0 255 0 127 | Зеленый (Альфа: 127), Пиксель (1, 1) |
82h | 4 | 00 00 FF 7F | 0 0 255 127 | Красный (Alpha: 127), Pixel (1,2) |
86h | 4 | FF FF FF 7F | 255 255 255 127 | Белый (Alpha: 127), Pixel (1,3) |
8Ah | 4 | FF 00 00 FF | 255 0 0 255 | Синий (Alpha: 255), Pixel (0,0) |
8Eh | 4 | 00 FF 00 FF | 0 255 0 255 | Зеленый (Alpha: 255), пиксель (0,1) |
92h | 4 | 00 00 FF FF | 0 0 255 255 | Красный (Альфа: 255), Пиксель (0,2) |
96h | 4 | FF FF FF FF | 255 255 255 255 255 | Белый (Альфа: 255), Пиксель (0,3) |
Обратите внимание, что данные растрового изображения начинаются с нижнего левого угла изображения.
Простота формата файла BMP и его широкое распространение в Windows и других местах, а также тот факт, что этот формат относительно хорошо документирован и не защищен патентами, делает его очень распространенным форматом, который программы обработки изображений из многих операционных систем могут читать и писать. Файлы ICO и CUR содержат растровые изображения, начинающиеся с BITMAPINFOHEADER.
Многие старые графические пользовательские интерфейсы использовали растровые изображения во встроенных графических подсистемах; например, подсистема GDI платформ Microsoft Windows и OS / 2, где конкретным используемым форматом является формат файла растрового изображения Windows и OS / 2, обычно называемый с расширением файла .BMP
.
В то время как большинство файлов BMP имеют относительно большой размер из-за отсутствия какого-либо сжатия (или, как правило, с низким коэффициентом кодирования длин серий на паллетированных изображениях), многие файлы BMP могут быть значительно сжат с помощью алгоритмов сжатия данных без потерь, таких как ZIP, поскольку они содержат избыточные данные. Некоторые форматы, такие как RAR, даже включают в себя процедуры, специально предназначенные для эффективного сжатия таких данных.
В X Window System используется аналогичный формат XBM для черно-белых изображений, а XPM (пиксельная карта) для цветных изображений. Также существует множество «сырых» форматов, в которых необработанные данные сохраняются без какой-либо другой информации. Форматы Portable Pixmap (PPM) и Truevision TGA также существуют, но используются реже - или только для специальных целей; например, TGA может содержать информацию о прозрачности.