Формат файла BMP - BMP file format

Растровое изображение Windows
Расширение имени файла
.bmp, .dib
Тип интернет-СМИизображение / BMP[1]
изображение / x-bmp
Типовой код"БМП"
BMPf
'БМПЗ'
Единый идентификатор типа (UTI)com.microsoft.bmp
РазработанКорпорация Майкрософт
Тип форматаРастровая графика
Открытый формат ?OSP за WMF

В Формат файла BMP, также известный как файл растрового изображения, формат файла растрового изображения (DIB), независимый от устройства и битовая карта, это растровая графика формат файла изображения используется для хранения битовая карта цифровые изображения, независимо от устройство отображения (например, графический адаптер ), особенно на Майкрософт Виндоус[2] и OS / 2[3] операционные системы.

Формат файла BMP может хранить двумерный цифровые изображения как монохромный и цвет, в различных глубина цвета, и, возможно, с Сжатие данных, альфа-каналы, и цветовые профили. В Метафайл Windows (WMF) охватывает формат файла BMP.[4]

Независимые от устройства растровые изображения и формат файла BMP

Диаграмма 1 - Структура файла растрового изображения

Microsoft определила конкретное представление цветных растровых изображений с разной глубиной цвета в качестве помощи для обмена растровыми изображениями между устройствами и приложениями с различными внутренними представлениями. Они назвали эти независимые от устройства растровые изображения или DIB, а формат файла для них называется форматом файла DIB или форматом файла изображения BMP.

По данным службы поддержки Microsoft:[5]

Не зависящие от устройства растровые изображения (DIB) - это формат, используемый для определения независимых от устройств растровых изображений с различным цветовым разрешением. Основная цель DIB - разрешить перенос растровых изображений с одного устройства на другое (отсюда и независимая от устройства часть имени). DIB - это внешний формат, в отличие от зависящего от устройства растрового изображения, которое появляется в системе как растровый объект (созданный приложением ...). DIB обычно переносится в метафайлах (обычно с использованием функции StretchDIBits ()), файлах BMP и буфере обмена (формат данных CF_DIB).

В следующих разделах подробно обсуждаются данные, хранящиеся в файле BMP или DIB. Это стандартный формат файла BMP.[5] Некоторые приложения создают файлы растровых изображений, которые не соответствуют документации Microsoft. Кроме того, используются не все поля; в этих неиспользуемых полях будет найдено значение 0.

Файловая структура

Файл растрового изображения состоит из структур фиксированного размера (заголовков), а также структур переменного размера, появляющихся в заранее определенной последовательности. В файле может появиться множество различных версий некоторых из этих структур из-за длительного развития этого формата файла.

Ссылаясь на схему 1, файл растрового изображения состоит из структур в следующем порядке:

Название структурыНеобязательныйРазмерЦельКомментарии
Заголовок файла растрового изображенияНет14 байтДля хранения общей информации о файле растрового изображенияНе требуется после загрузки файла в память
Заголовок DIBНетИсправленный размер
(Существует 7 разных версий)
Для хранения подробной информации о растровом изображении и определения формата пикселейСразу следует за заголовком файла Bitmap
Дополнительные битовые маскида3 или 4 DWORD[6]
(12 или 16 байт)
Чтобы определить формат пикселейПрисутствует только в том случае, если заголовок DIB является BITMAPINFOHEADER а член метода сжатия установлен на BI_BITFIELDS или BI_ALPHABITFIELDS
Таблица цветовПолу-необязательныйПеременный размерЧтобы определить цвета, используемые данными растрового изображения (массив пикселей)Обязательно для глубина цвета ≤ 8 бит
Gap1даПеременный размерВыравнивание структурыАртефакт смещения файла до массива пикселей в заголовке файла Bitmap
Массив пикселейНетПеременный размерЧтобы определить фактические значения пикселейФормат пикселей определяется заголовком DIB или дополнительными битовыми масками. Каждая строка в массиве пикселей дополняется размером, кратным 4 байтам.
Gap2даПеременный размерВыравнивание структурыАртефакт поля смещения данных профиля ICC в заголовке DIB
Цветовой профиль ICCдаПеременный размерЧтобы определить цветовой профиль для управления цветомТакже может содержать путь к внешнему файлу, содержащему цветовой профиль. При загрузке в память как «неупакованный DIB» он располагается между таблицей цветов и Gap1.[7]

DIB в памяти

Файл растрового изображения, загруженный в память, становится структурой данных DIB - важным компонентом Windows GDI API. Структура данных DIB в памяти почти такая же, как и в формате файла BMP, но не содержит 14-байтового заголовка файла растрового изображения и начинается с заголовка DIB. Для DIB, загруженных в память, таблица цветов может также состоять из 16-битных записей, составляющих индексы для текущей реализованной палитры.[8] (дополнительный уровень косвенности) вместо явных определений цветов RGB. Во всех случаях массив пикселей должен начинаться с адреса памяти, кратного 4 байтам. В неупакованных DIB, загруженных в память, необязательные данные цветового профиля должны располагаться сразу после таблицы цветов и перед промежутком1 и массивом пикселей.[7] (в отличие от рис. 1).

Когда размер gap1 и gap2 равен нулю, структура данных DIB в памяти обычно упоминается как «упакованный DIB» и может упоминаться одним указателем, указывающим на начало заголовка DIB. Во всех случаях массив пикселей должен начинаться с адреса памяти, кратного 4 байтам. В некоторых случаях может потребоваться настроить количество записей в таблице цветов, чтобы заставить адрес памяти массива пикселей быть кратным 4 байтам.[8] Для «упакованных DIB», загруженных в память, необязательные данные цветового профиля должны сразу следовать за массивом пикселей, как показано на диаграмме diag. 1 (с разрывом 1 = 0 и разрывом 2 = 0).[7]
«Упакованные DIB» требуются Windows функции API буфера обмена, а также некоторые функции кисти и ресурсов Windows с рисунком.[9]

Заголовок файла растрового изображения

Этот блок байтов находится в начале файла и используется для идентификации файла. Типичное приложение сначала читает этот блок, чтобы убедиться, что файл на самом деле является файлом BMP и не поврежден. Первые 2 байта формата файла BMP - это символ «B», затем символ «M» в ASCII кодирование. Все целые значения хранятся в прямой порядок байтов формат (т.е. сначала младший байт).

Смещение шестигранникаOffset decРазмерЦель
0002 байтаВ поле заголовка используется для идентификации файла BMP и DIB. 0x42 0x4D в шестнадцатеричный, такой же как BM в ASCII. Возможны следующие записи:
BM
Windows 3.1x, 95, NT и т. Д.
BA
Растровый массив структуры OS / 2
CI
Значок цвета структуры OS / 2
CP
Указатель цвета OS / 2 const
IC
Значок структуры OS / 2
PT
Указатель OS / 2
0224 байтаРазмер файла BMP в байтах
0662 байтаЗарезервированный; Фактическое значение зависит от приложения, которое создает изображение, при создании вручную может быть 0
0882 байтаЗарезервированный; Фактическое значение зависит от приложения, которое создает изображение, при создании вручную может быть 0
0A104 байтаСмещение, то есть начальный адрес байта, в котором могут быть найдены данные растрового изображения (массив пикселей).

Заголовок DIB (заголовок информации о битовой карте)

Этот блок байтов сообщает приложению подробную информацию об изображении, которое будет использоваться для вывода изображения на экран. Блок также соответствует заголовку, используемому внутри Windows и OS / 2, и имеет несколько различных вариантов. Все они содержат поле dword (32-битное) с указанием их размера, чтобы приложение могло легко определить, какой заголовок используется в изображении. Причина того, что существуют разные заголовки, заключается в том, что Microsoft несколько раз расширяла формат DIB. Новые расширенные заголовки могут использоваться с некоторыми функциями GDI вместо старых, обеспечивая большую функциональность. Поскольку GDI поддерживает функцию загрузки файлов растровых изображений, типичные приложения Windows используют эту функцию. Одним из следствий этого является то, что для таких приложений поддерживаемые ими форматы BMP соответствуют форматам, поддерживаемым запущенной версией Windows. См. Дополнительную информацию в таблице ниже.

Заголовки растровых изображений Windows и OS / 2
РазмерНазвание заголовкаПоддержка ОСФункцииНаписано
12BITMAPCOREHEADER
OS21XBITMAPHEADER
Windows 2.0 или позже
OS / 2 1.x[3]
64OS22XBITMAPHEADEROS / 2 BITMAPCOREHEADER2Добавляет полутоновое изображение. Добавляет RLE и Хаффман 1D сжатие.
16OS22XBITMAPHEADERЭтот вариант предыдущего заголовка содержит только первые 16 байтов, а остальные байты предполагаются нулевыми значениями.[3]

Примером такого случая является графический pal8os2v2-16.bmp[10]из пакета BMP Suite.[11]

40BITMAPINFOHEADERWindows NT, 3,1x или позже[2]Добавляет форматы 16 бит на пиксель и 32 бит на пиксель. Добавляет сжатие RLE.
52BITMAPV2INFOHEADERБез документовДобавляет битовые маски RGB.Adobe Photoshop
56BITMAPV3INFOHEADERОфициально не документировано, но эта документация была размещена на форумах Adobe сотрудником Adobe с заявлением о том, что стандарт в какой-то момент в прошлом был включен в официальную документацию MS.[12]Добавляет альфа-канал битовая маска.Adobe Photoshop
108BITMAPV4HEADERWindows NT 4.0, 95 или позжеДобавляет тип цветового пространства и гамма-коррекция
124BITMAPV5HEADERWindows NT 5.0, 98 или позжеДобавляет Цветовые профили ICCGIMP
Смещение (шестнадцатеричное)Смещение (уб)Размер (байты)OS / 2 1.x BITMAPCOREHEADER[3]
0E144Размер этого заголовка (12 байт)
12182Ширина растрового изображения в пикселях (беззнаковый 16-битный)
14202Высота растрового изображения в пикселях (беззнаковый 16-битный)
16222Количество цветных плоскостей, должно быть 1
18242Количество бит на пиксель
Растровые изображения OS / 2 1.x несжаты и не могут иметь 16 или 32 бит на пиксель.

Windows 2.x BITMAPCOREHEADER отличается от OS / 2 1.x BITMAPCOREHEADER (показанного в таблице выше) тем, что поля ширины и высоты изображения являются целыми числами со знаком, а не беззнаковыми.[13]

Версии после BITMAPCOREHEADER только добавляйте поля в конец заголовка предыдущей версии. Например: BITMAPV2INFOHEADER добавляет поля в BITMAPINFOHEADER, и BITMAPV3INFOHEADER добавляет поля в BITMAPV2INFOHEADER.

Был введен интегрированный альфа-канал с недокументированными BITMAPV3INFOHEADER и с задокументированными BITMAPV4HEADER (поскольку Windows 95 ) и используется в Windows XP система входа и темы, а также Microsoft Office (с v2000); это поддерживается некоторыми редактирование изображений программное обеспечение, такое как Adobe Photoshop начиная с версии 7 и Adobe Flash начиная с версии MX 2004 (тогда известной как Macromedia Flash). Это также поддерживается GIMP, Гугл Хром, Microsoft PowerPoint и Microsoft Word.

По соображениям совместимости большинство приложений используют старые заголовки DIB для сохранения файлов. Поскольку OS / 2 больше не поддерживается после Windows 2000, на данный момент распространенным форматом Windows является BITMAPINFOHEADER заголовок. См. Описание в следующей таблице. Все значения сохраняются как целые числа без знака, если явно не указано иное.

Смещение (шестнадцатеричное)Смещение (уб)Размер (байты)Windows BITMAPINFOHEADER[2]
0E144размер этого заголовка в байтах (40)
12184ширина растрового изображения в пикселях (целое число со знаком)
16224высота растрового изображения в пикселях (целое число со знаком)
262количество цветных плоскостей (должно быть 1)
282количество бит на пиксель, которое представляет собой глубину цвета изображения. Типичные значения: 1, 4, 8, 16, 24 и 32.
1E304используемый метод сжатия. В следующей таблице приведен список возможных значений.
22344размер изображения. Это размер необработанных данных растрового изображения; для растровых изображений BI_RGB может быть задан фиктивный 0.
26384горизонтальное разрешение изображения. (пикселей на метр, целое число со знаком)
424вертикальное разрешение изображения. (пикселей на метр, целое число со знаком)
2E464количество цветов в цветовой палитре, или от 0 по умолчанию до 2п
32504количество используемых важных цветов или 0, если важен каждый цвет; обычно игнорируется

Метод сжатия (смещение 30) может быть:

ЦенитьОпознаноМетод сжатияКомментарии
0BI_RGBниктоНаиболее общий
1BI_RLE8RLE 8 бит / пиксельМожет использоваться только с растровыми изображениями 8 бит / пиксель
2BI_RLE4RLE 4 бит / пиксельМожет использоваться только с растровыми изображениями 4 бит / пиксель
3BI_BITFIELDSOS22XBITMAPHEADER: Хаффман 1DBITMAPV2INFOHEADER: Маски битовых полей RGB,
BITMAPV3INFOHEADER+: RGBA
4BI_JPEGOS22XBITMAPHEADER: RLE-24BITMAPV4INFOHEADER+: JPEG изображение для печати[14]
5BI_PNGBITMAPV4INFOHEADER+: PNG изображение для печати[14]
6BI_ALPHABITFIELDSМаски битового поля RGBAТолько Windows CE 5.0 с .NET 4.0 или новее
11BI_CMYKниктоТолько Метафайл Windows CMYK[4]
12BI_CMYKRLE8РЛЭ-8Только Метафайл Windows CMYK
13BI_CMYKRLE4РЛЭ-4Только Метафайл Windows CMYK

OS / 2 2.x OS22XBITMAPHEADER (BITMAPINFOHEADER2 в документации IBM) содержит 24 дополнительных байта:[3]

Смещение (шестнадцатеричное)Смещение (уб)Размер (байты)OS / 2 OS22XBITMAPHEADER (BITMAPINFOHEADER2)[3]
36542Перечислимое значение, определяющее единицы для горизонтального и вертикального разрешения (смещения 38 и 42). Единственное определенное значение - 0, что означает количество пикселей на метр.
38562Прокладка. Игнорируется и должен быть равен нулю
582Перечислимое значение, указывающее направление, в котором биты заполняют битовую карту. Единственное определенное значение - 0, что означает, что начало координат находится в нижнем левом углу. Биты заполняются слева направо, затем снизу вверх.

Обратите внимание, что растровые изображения Windows (которые не включают это поле) также могут указывать начало левого верхнего угла (биты заполняются слева направо, затем сверху вниз) с использованием отрицательного значения для высоты изображения.

3C602Перечислимое значение, указывающее алгоритм полутонового изображения, который следует использовать при визуализации изображения.
40644Параметр полутонового изображения 1 (см. Ниже)
44684Параметр полутонового изображения 2 (см. Ниже)
48724Пронумерованное значение, указывающее кодировку цвета для каждой записи в таблице цветов. Единственное определенное значение - 0, что означает RGB.
4C764Идентификатор, определяемый приложением. Не используется для рендеринга изображений

Алгоритм полутонового изображения (смещение 60) может быть:

ЦенитьАлгоритм полутонового изображенияКомментарии
0никтоНаиболее общий
1Распространение ошибокПараметр полутонового изображения 1 (смещение 64) представляет собой процент демпфирования ошибок. 100 означает отсутствие демпфирования. 0 означает, что ошибки не распространяются
2PANDA: алгоритм обработки для получения некодированных документовПараметры полутонового изображения 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[6] опция в элементе biCompression.

Количество записей в палитре - либо 2п (где n - количество бит на пиксель) или меньшее число, указанное в заголовке (в OS / 2 BITMAPCOREHEADER формат заголовка, поддерживается только полноразмерная палитра).[3][5] В большинстве случаев каждая запись в таблице цветов занимает 4 байта в следующем порядке: синий, зеленый, красный, 0x00 (исключения см. Ниже). Это индексируется в BITMAPINFOHEADER под функцией biBitCount.

Таблица цветов - это блок байтов (таблица), в котором перечислены цвета, используемые изображением. Каждый пиксель в индексированном цветном изображении описывается числом битов (1, 4 или 8), которое является индексом одного цвета, описанного в этой таблице. Целью цветовой палитры в индексированных цветных растровых изображениях является информирование приложения о фактическом цвете, которому соответствует каждое из этих значений индекса. Назначение таблицы цветов в неиндексированных (не палитрах) растровых изображений - перечислить цвета, используемые растровым изображением, для целей оптимизации на устройствах с ограниченными возможностями отображения цвета и облегчить будущее преобразование в различные форматы пикселей и палитру.

Цвета в таблице цветов обычно указываются в 4 байтах на запись. RGBA32 формат. Таблица цветов, используемая с OS / 2 BITMAPCOREHEADER использует 3 байта на запись RGB24 формат.[3][5] Для DIB, загруженных в память, таблица цветов может дополнительно состоять из 2-байтовых записей - эти записи представляют собой индексы к текущей реализованной палитре.[8] вместо явных определений цветов RGB.

Microsoft не запрещает наличие допустимой битовой маски альфа-канала[15] в BITMAPV4HEADER и BITMAPV5HEADER для индексированных цветных изображений 1bpp, 4bpp и 8bpp, что указывает на то, что записи таблицы цветов могут также указывать альфа-компонент с помощью 8.8.8.[0-8].[0-8] формат через RGBQUAD.rgbReserved[16] член. Однако некоторые версии документации Microsoft запрещают эту функцию, заявляя, что член RGBQUAD.rgbReserved «должен быть равен нулю».

Как упоминалось выше, таблица цветов обычно не используется, если пиксели имеют формат 16 бит на пиксель (16 бит на пиксель) (и выше); в этих файлах растровых изображений обычно нет записей таблицы цветов. Однако документация Microsoft (на веб-сайте MSDN с 16 ноября 2010 г.[17]) указывает, что для 16 бит на пиксель (и выше) может присутствовать таблица цветов для хранения списка цветов, предназначенных для оптимизации на устройствах с ограниченными возможностями цветного отображения, а также указывает, что в таких случаях нет записей проиндексированной палитры в эта таблица цветов. Это может показаться противоречием, если не делается различий между обязательными записями палитры и дополнительным списком цветов.

Пиксельное хранилище

Биты, представляющие пиксели растрового изображения, упакованный рядами. Размер каждой строки округляется до значения, кратного 4 байтам (32-битное DWORD ) путем заполнения.

Для изображений с высотой выше 1 несколько заполненных строк сохраняются последовательно, образуя массив пикселей.

Общее количество байтов, необходимых для хранения одной строки пикселей, можно рассчитать как:

ImageWidth выражается в пикселях. В приведенном выше уравнении используется функции пола и потолка.

Общее количество байтов, необходимое для хранения массива пикселей в п бит на пиксель (bpp) изображения, с 2п цветов, можно рассчитать, учитывая эффект округления размера каждой строки до кратного 4 байтам следующим образом:

PixelArraySize = RowSize · |ImageHeight|
ImageHeight выражается в пикселях. Абсолютное значение необходимо, потому что ImageHeight выражается как отрицательное число для изображений сверху вниз.

Массив пикселей (данные растрового изображения)

Массив пикселей представляет собой блок 32-битных DWORD, который описывает изображение пиксель за пикселем. Обычно пиксели хранятся «снизу вверх», начиная с нижнего левого угла, идя слева направо, а затем построчно снизу вверх.[5] Пока не BITMAPCOREHEADER Несжатые растровые изображения Windows также могут храниться сверху вниз, если значение высоты изображения отрицательное.

В исходной OS / 2 DIB единственными четырьмя допустимыми значениями глубины цвета были 1, 4, 8 и 24 бита на пиксель (bpp).[5] Современные заголовки DIB допускают форматы пикселей с 1, 2, 4, 8, 16, 24 и 32 битами на пиксель (bpp).[18] GDI + также разрешает 64 бита на пиксель.[19]

Байты заполнения (не обязательно 0) должны быть добавлены в конец строк, чтобы увеличить длину строк до кратной четырем байтам. Когда массив пикселей загружается в память, каждая строка должна начинаться с адреса памяти, кратного 4. Это ограничение адреса / смещения является обязательным только для массивов пикселей, загруженных в память. В целях хранения файлов только размер каждой строки должен быть кратен 4 байтам, а смещение файла может быть произвольным.[5] 24-битное растровое изображение с Width = 1 будет иметь 3 байта данных на строку (синий, зеленый, красный) и 1 байт заполнения, тогда как Width = 2 будет иметь 6 байтов данных и 2 байта заполнения, Width = 3 будет иметь 9 байтов данных и 3 байта заполнения, а ширина = 4 будет иметь 12 байтов данных без заполнения.

Сжатие

  • Проиндексировано цветные изображения могут быть сжаты с 4 или 8 битами RLE или же Хаффман 1D алгоритм.
  • OS / 2 BITMAPCOREHEADER2 24bpp изображения могут быть сжаты с помощью 24-битного алгоритма RLE.
  • В 16bpp и 32bpp изображения всегда хранится без сжатия.
  • Обратите внимание, что изображения с любой глубиной цвета при желании можно сохранять без сжатия.

Формат пикселей

  • Формат 1 бит на пиксель (1 бит на пиксель) поддерживает 2 различных цвета (например: черный и белый). Значения пикселей хранятся в каждом бите, причем первый (крайний левый) пиксель находится в самом старшем бите первого байта.[5] Каждый бит представляет собой указатель в таблице из двух цветов. Неустановленный бит будет относиться к первой записи таблицы цветов, а установленный бит будет относиться к последней (второй) записи таблицы цветов.
  • Формат 2 бита на пиксель (2bpp) поддерживает 4 различных цвета и сохраняет 4 пикселя на 1 байт, причем крайний левый пиксель находится в двух наиболее значимых битах (Windows CE Только:[20]). Каждое значение пикселя представляет собой 2-битный индекс в таблице, содержащей до 4 цветов.
  • Формат 4-бит на пиксель (4bpp) поддерживает 16 различных цветов и сохраняет 2 пикселя на 1 байт, причем крайний левый пиксель находится в более значимом грызть.[5] Каждое значение пикселя представляет собой 4-битный индекс в таблице, содержащей до 16 цветов.
  • Формат 8 бит на пиксель (8bpp) поддерживает 256 различных цветов и сохраняет 1 пиксель на 1 байт. Каждый байт является индексом в таблице, содержащей до 256 цветов.
  • Формат 16 бит на пиксель (16 бит на пиксель) поддерживает 65536 различных цветов и сохраняет 1 пиксель на 2-байтовое СЛОВО. Каждое СЛОВО может определять альфа, красный, зеленый и синий образцы пикселя.
  • Формат 24-битных пикселей (24bpp) поддерживает 16 777 216 различных цветов и сохраняет значение 1 пикселя на 3 байта. Каждое значение пикселя определяет образцы красного, зеленого и синего цвета пикселя (8.8.8.0.0 в нотации RGBAX). Конкретно в порядке: синий, зеленый и красный (по 8 бит на каждый отсчет).[5]
  • Формат 32 бит на пиксель (32 бит на пиксель) поддерживает 4 294 967 296 различных цветов и сохраняет 1 пиксель на 4-байтовый DWORD. Каждый DWORD может определять альфа, красный, зеленый и синий образцы пикселя.

Чтобы разрешить неоднозначность того, какие биты определяют, какие выборки, заголовки DIB предоставляют определенные значения по умолчанию, а также определенные BITFIELDS, которые являются битовыми масками, которые определяют принадлежность определенной группы битов в пикселе к определенной канал. Следующая диаграмма определяет этот механизм:

Диаг. 2 - Механизм BITFIELDS для 32-битного пикселя, представленного в нотации длины выборки RGBAX
Диаг. 2 - Механизм BITFIELDS для 32-битного пикселя, представленного в нотации длины выборки RGBAX

Поля выборки, определенные битовыми масками BITFIELDS, должны быть смежными и не перекрываться, но порядок полей выборки произвольный. Наиболее распространенный порядок полей: альфа, синий, зеленый, красный (от MSB к LSB). Красная, зеленая и синяя битовые маски действительны только тогда, когда элемент сжатия заголовка DIB установлен на BI_BITFIELDS. Альфа-битовая маска действительна всякий раз, когда она присутствует в заголовке DIB или когда элемент сжатия заголовка DIB установлен в BI_ALPHABITFIELDS[6] (Windows CE Только).

Диаг. 3 - Формат пикселей с альфа-каналом для 16-битного пикселя (в обозначении длины образца RGBAX), фактически созданный Adobe Photoshop [21]
Диаг. 3 - Формат пикселей с альфа-каналом для 16-битного пикселя (в обозначении длины образца RGBAX), фактически созданный Adobe Photoshop.[21]
Все возможные форматы пикселей в DIB
Все возможные форматы пикселей в DIB

Подтипы видео RGB

Описанный выше механизм BITFIELD позволяет определять десятки тысяч различных форматов пикселей, однако на практике используются только некоторые из них,[21] все форматы палитры RGB8, RGB4 и RGB1 (отмечены желтым в таблице выше, dshow.h MEDIASUBTYPE) и:

Подтипы несжатого видео RGB[22]
R.G.B.A.X.Подтип RGBR.G.B.A.X.Подтип ARGB
8.8.8.0.8RGB328.8.8.8.0ARGB32
10.10.10.2.0A2R10G10B10
8.8.8.0.0RGB2410.10.10.2.0A2B10G10R10
5.6.5.0.0RGB5654.4.4.4.0ARGB4444
5.5.5.0.1RGB5555.5.5.1.0ARGB1555
Битовые поля для десяти бит RGB[22]
Битовое полеКомпенсироватьБиты A2R10G10B10Биты A2B10G10R10
красный36ч00 00 F0 3FLE: 3FF000002029FF 03 00 00LE: 000003FF 0 9
Зеленый3Ач00 FC 0F 00LE: 000FFC00101900 FC 0F 00LE: 000FFC001019
Синий3EhFF 03 00 00LE: 000003FF 0 900 00 F0 3FLE: 3FF000002029
Альфа42ч00 00 00 C0LE: C0000000303100 00 00 C0LE: C00000003031

В версии 2.1.4 FFmpeg поддерживает (в собственной терминологии) форматы пикселей BMP bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, серый, pal8, и моноб; т.е. бгра был единственным поддерживаемым форматом пикселей с прозрачностью.[23]

Пример 1 растрового изображения 2 × 2 пикселя с кодировкой 24 бит / пиксель

Пример 1

Ниже приведен пример 24-битного растрового изображения размером 2 × 2 пикселя (заголовок Windows DIB BITMAPINFOHEADER) с форматом пикселей RGB24.

КомпенсироватьРазмерШестнадцатеричное значениеЦенитьОписание
BMP заголовок
242 4D«БМ»Поле идентификатора (42h, 4Dh)
446 00 00 0070 байт (54 + 16)Размер файла BMP (54 байта заголовка + 16 байтов данных)
200 00НеиспользованныйДля конкретного приложения
200 00НеиспользованныйДля конкретного приложения
Ах436 00 00 0054 байта (14 + 40)Смещение, где можно найти массив пикселей (данные растрового изображения)
Заголовок DIB
Эх428 00 00 0040 байтКоличество байтов в заголовке DIB (с этого момента)
12ч402 00 00 002 пикселя (слева направо)Ширина растрового изображения в пикселях
16ч402 00 00 002 пикселя (порядок снизу вверх)Высота растрового изображения в пикселях. Положительно для порядка пикселей снизу вверх.
1Ач201 001 самолетКоличество используемых цветовых плоскостей
218 0024 битКоличество бит на пиксель
1Eh400 00 00 000BI_RGB, сжатие массива пикселей не используется
22ч410 00 00 0016 байтРазмер необработанных данных растрового изображения (включая заполнение)
26ч413 0B 00 002835 пикселей / метр по горизонталиРазрешение печати изображения,
72 точек на дюйм × 39,3701 дюймов на метр дает 2834,6472
2Ач413 0B 00 002835 пикселей / метр по вертикали
2Eh400 00 00 000 цветовКоличество цветов в палитре
32ч400 00 00 000 важных цветов0 означает, что все цвета важны
Начало массива пикселей (данные растрового изображения)
36ч300 00 FF0 0 255Красный, пиксель (0,1)
39ч3FF FF FF255 255 255Белый, Пиксель (1,1)
200 000 0Заполнение для 4-байтового выравнивания (может быть значением, отличным от нуля)
3Eh3FF 00 00255 0 0Синий, Пиксель (0,0)
41ч300 FF 000 255 0Зеленый, пиксель (1,0)
44ч200 000 0Заполнение для 4-байтового выравнивания (может быть значением, отличным от нуля)
0,0: синий 0000FF FF0,1: зеленый 00FF00 FF0,2: красный FF00000 FF0,3: белый FFFFFF FF1,0: синий 0000FF 7F, полупрозрачный1,1: зеленый 00FF00 7F, полупрозрачный1,2: красный FF0000 7F, полупрозрачный1,3: белый FFFFFF 7F, полупрозрачный
Об этом изображении
Пример 2 растрового изображения 4 × 2 пикселя с кодировкой 32 бит / пиксель

Пример 2

Ниже приведен пример 32-битного растрового изображения размером 4 × 2 пикселя со значениями непрозрачности в альфа-канале (заголовок Windows DIB BITMAPV4HEADER) с форматом пикселей ARGB32.

КомпенсироватьРазмерШестнадцатеричное значениеЦенитьОписание
BMP заголовок
242 4D«БМ»Поле идентификатора (42h, 4Dh)
49A 00 00 00154 байта (122 + 32)Размер файла BMP
200 00НеиспользованныйДля конкретного приложения
200 00НеиспользованныйДля конкретного приложения
Ах47A 00 00 00122 байта (14 + 108)Смещение, где можно найти массив пикселей (данные растрового изображения)
Заголовок DIB
Эх46C 00 00 00108 байтКоличество байтов в заголовке DIB (с этого момента)
12ч404 00 00 004 пикселя (слева направо)Ширина растрового изображения в пикселях
16ч402 00 00 002 пикселя (порядок снизу вверх)Высота растрового изображения в пикселях
1Ач201 001 самолетКоличество используемых цветовых плоскостей
220 0032 битКоличество бит на пиксель
1Eh403 00 00 003BI_BITFIELDS, сжатие массива пикселей не используется
22ч420 00 00 0032 байтаРазмер необработанных данных растрового изображения (включая заполнение)
26ч413 0B 00 002835 пикселей / метр по горизонталиРазрешение печати изображения,
72 точек на дюйм × 39,3701 дюймов на метр дает 2834,6472
2Ач413 0B 00 002835 пикселей / метр по вертикали
2Eh400 00 00 000 цветовКоличество цветов в палитре
32ч400 00 00 000 важных цветов0 означает, что все цвета важны
36ч400 00 FF 0000FF0000 с прямым порядком байтовБитовая маска красного канала (действительна, поскольку указан параметр BI_BITFIELDS)
3Ач400 FF 00 000000FF00 с прямым порядком байтовБитовая маска зеленого канала (действительна, поскольку указан параметр BI_BITFIELDS)
3Eh4FF 00 00 00000000FF с прямым порядком байтовБитовая маска синего канала (действительна, поскольку указан параметр BI_BITFIELDS)
42ч400 00 00 FFFF000000 с прямым порядком байтовБитовая маска альфа-канала
46ч420 6E 69 57с прямым порядком байтов "Победить "LCS_WINDOWS_COLOR_SPACE
4Ач24ч24ч * 00 ... 00CIEXYZTRIPLE Конечные точки цветового пространстваНе используется для LCS "Победить " или же "sRGB"
6Eh400 00 00 000 Красная ГаммаНе используется для LCS "Победить " или же "sRGB"
72ч400 00 00 000 Зеленая гаммаНе используется для LCS "Победить " или же "sRGB"
76ч400 00 00 000 Синяя гаммаНе используется для LCS "Победить " или же "sRGB"
Начало массива пикселей (данные растрового изображения)
7Ач4FF 00 00 7F255 0 0 127Синий (Альфа: 127), Пиксель (1,0)
7Eh400 FF 00 7F0 255 0 127Зеленый (Альфа: 127), Пиксель (1,1)
82ч400 00 FF 7F0 0 255 127Красный (Альфа: 127), Пиксель (1,2)
86ч4FF FF FF 7F255 255 255 127Белый (Альфа: 127), Пиксель (1,3)
8Ач4FF 00 00 FF255 0 0 255Синий (Альфа: 255), Пиксель (0,0)
8Eh400 FF 00 FF0 255 0 255Зеленый (Альфа: 255), Пиксель (0,1)
92ч400 00 FF FF0 0 255 255Красный (Альфа: 255), Пиксель (0,2)
96ч4FF FF FF FF255 255 255 255Белый (Альфа: 255), Пиксель (0,3)

Обратите внимание, что данные растрового изображения начинаются с нижнего левого угла изображения.

Использование формата BMP

Простота формата файла BMP и его широкое распространение в Windows и других странах, а также тот факт, что этот формат относительно хорошо документирован и не защищен патентами, делают его очень распространенным форматом, который программы обработки изображений из многих операционных систем могут читать. и писать[нужна цитата ]. ICO и файлы CUR содержат растровые изображения, начинающиеся с BITMAPINFOHEADER.

Много старше графический пользовательский интерфейс использовали растровые изображения в своих встроенных графических подсистемах;[24] например, платформы Microsoft Windows и OS / 2 » GDI подсистема, где конкретным используемым форматом является Формат файлов растровых изображений Windows и OS / 2, обычно именуемые расширение файла из .BMP.[25]

Хотя большинство файлов BMP имеют относительно большой размер из-за отсутствия какого-либо сжатия (или, как правило, с низким коэффициентом сжатия) кодирование длин серий на изображениях на поддонах), многие файлы BMP можно значительно сжать с помощью сжатие данных без потерь такие алгоритмы как ZIP потому что они содержат избыточные данные. Некоторые форматы, например RAR, даже включать процедуры, специально предназначенные для эффективного сжатия таких данных.

Связанные форматы

В X Window System использует аналогичный XBM формат для черно-белых изображений и XPM (пиксельная карта) для цветных изображений. Также существует множество «сырых» форматов, в которых необработанные данные сохраняются без какой-либо другой информации. В Portable Pixmap (PPM) и Truevision TGA форматы тоже существуют, но используются реже - или только для специальных целей; например, TGA может содержать информацию о прозрачности.

Рекомендации

  1. ^ «Соображения IANA». Типы Windows Image Media. сек. 5. Дои:10.17487 / RFC7903. RFC 7903.
  2. ^ а б c Джеймс Д. Мюррей; Уильям ванРайпер (апрель 1996 г.). Энциклопедия форматов графических файлов (Второе изд.). О'Рейли. BMP. ISBN  1-56592-161-5. Получено 2014-03-07.
  3. ^ а б c d е ж грамм час Джеймс Д. Мюррей; Уильям ванРайпер (апрель 1996 г.). Энциклопедия форматов графических файлов (Второе изд.). О'Рейли. os2bmp. ISBN  1-56592-161-5. Получено 2014-03-07.
  4. ^ а б «[MS-WMF]: формат метафайлов Windows». MSDN. 2014-02-13. Получено 2014-03-12.
  5. ^ а б c d е ж грамм час я j «DIB и их использование». Справка и поддержка Microsoft. Получено 2015-05-14.
  6. ^ а б c MSDN - BITMAPINFOHEADER (Windows CE 5.0): BI_ALPHABITFIELDS в члене biCompression
  7. ^ а б c MSDN Типы заголовков растровых изображений
  8. ^ а б c MSDN Структура BITMAPINFO
  9. ^ Фэн Юань - Программирование графики для Windows: Win32 GDI и DirectDraw: Упакованное независимое от устройства растровое изображение (CreateDIBPatternBrush, CreateDIBPatternBrushPt, FindResource, LoadResource, LockResource)
  10. ^ Саммерс, Джейсон (2015-10-30). "pal8os2v2-16.bmp". Получено 2016-07-06.
  11. ^ Саммерс, Джейсон (2015-10-30). «БМП Люкс». Получено 2016-07-06.
  12. ^ Кокс, Крис (15.11.2010). «Недопустимый формат BMP с альфа-каналом». Photoshop Windows Форум. Adobe. В архиве из оригинала 27.01.2015. Получено 2016-05-22.
  13. ^ https://www.fileformat.info/format/bmp/egff.htm
  14. ^ а б «Расширения JPEG и PNG для определенных функций и структур растровых изображений».
  15. ^ MSDN - BITMAPV4HEADER: Член bV4AlphaMask
  16. ^ MSDN - RGBQUAD: rgbReserved член
  17. ^ см. примечание в разделе biClrUsed MSDN BITMAPINFOHEADER
  18. ^ MSDN - BITMAPINFOHEADER: Член biBitCount
  19. ^ «Типы растровых изображений». MSDN. 2012-06-03. Получено 2014-03-16.
  20. ^ MSDN: Windows CE - BITMAPINFOHEADER Структура
  21. ^ а б Adobe Photoshop: Формат BMP В архиве 2011-09-22 на Wayback Machine
  22. ^ а б «Подтипы несжатого видео RGB». dshow.h. MSDN. Получено 2014-03-11.
  23. ^ «Форматы изображений». FFmpeg Общая документация. 2014. Получено 2014-02-23.
  24. ^ Джулиан Смарт; Стефан Чомор и Кевин Хок (2006). Кросс-платформенное программирование графического интерфейса с помощью Wxwidgets. Прентис Холл. ISBN  0-13-147381-6.
  25. ^ «Файл растрового изображения (BMP), версия 5». Цифровое сохранение. Библиотека Конгресса. 2014-01-08. Получено 2014-03-11.

внешняя ссылка