Формат файла BMP

редактировать
Растровое изображение Windows
Расширение имени файла .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.

Содержание

  • 1 Независимые от устройства растровые изображения и формат файла BMP
  • 2 Структура файла
    • 2.1 DIB в памяти
    • 2.2 Заголовок файла растрового изображения
    • 2.3 Заголовок DIB (заголовок информации о растровом изображении)
    • 2.4 Таблица цветов
    • 2.5 Хранение пикселей
      • 2.5.1 Пиксельный массив (растровые данные)
      • 2.5.2 Сжатие
      • 2.5.3 Формат пикселей
    • 2.6 Подтипы видео RGB
    • 2.7 Пример 1
    • 2.8 Пример 2
  • 3 Использование формата BMP
  • 4 Связанные форматы
  • 5 Ссылки
  • 6 Внешние ссылки

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

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

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 в памяти

Файл растрового изображения, загруженный в память, становится структурой данных 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 (т.е. сначала младший байт).

Смещение в шестнадцатеричном форматеСмещение в десятичном форматеРазмерНазначение
0002 байтаПоле заголовка используется для идентификации файл BMP и DIB имеет формат 0x42 0x4Dв шестнадцатеричном формате, то же самое, что и BMв ASCII. Возможны следующие записи:
BM
Windows 3.1x, 95, NT,... и т. Д.
BA
растровый массив структуры OS / 2
CI
значок структуры цвета OS / 2
CP
указатель константного цвета OS / 2
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. OS21XBITMAPHEADERWindows 2.0 или новее. OS / 2 1.x
64OS22XBITMAPHEADEROS / 2 BITMAPCOREHEADER2Добавляет полутоновое изображение. Добавляет RLE и Huffman 1D сжатие.
16OS22XBITMAPHEADERЭтот вариант предыдущего заголовка содержит только первые 16 байтов, а остальные байты считаются нулевыми значениями.

Примером такого случая является рисунок pal8os2v2-16.bmp из BMP Suite.

40BITMAPINFOHEADERWindows NT, 3.1x или более поздняя версияДобавляет 16 форматы bpp и 32 bpp. Добавляет сжатие RLE.
52BITMAPV2INFOHEADERНедокументированноеДобавляет битовые маски RGB.Adobe Photoshop
56BITMAPV3INFOHEADERОфициально не документировано, но эта документация была размещена на форумах Adobe сотрудником Adobe с заявлением, что стандарт был когда-то ранее включалось в официальную документацию MS.Добавляет альфа-канал битовую маску.Adobe Photoshop
108BITMAPV4HEADERWindows NT 4.0, 95 или новееДобавляет тип цветового пространства и гамма-коррекцию
124BITMAPV5HEADERWindows NT 5.0, 98 или новееДобавляет цветовые профили ICC GIMP
Смещение (шестнадцатеричное)Смещение (десятичное)Размер (байты)OS / 2 1.x BITMAPCOREHEADER
0E144Размер этого заголовка (12 байтов)
12182Ширина битовой карты в пикселей (16 бит без знака)
14202Высота растрового изображения в пикселях (16 бит без знака)
16222Количество цветовых плоскостей, должно быть 1
18242Число бит на пиксель
Растровые изображения 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
0E144размер этого заголовка в байтах (40)
12184ширина битовой карты в пикселях (целое число со знаком)
16224высота битовой карты в пикселях (целое число со знаком)
1A262количество цветовых плоскостей (должно быть 1)
1C282количество битов на пиксель, которое представляет собой глубину цвета изображения. Типичные значения - 1, 4, 8, 16, 24 и 32.
1E304используемый метод сжатия. В следующей таблице приведен список возможных значений
22344размера изображения. Это размер необработанных данных растрового изображения; для растровых изображений BI_RGB может быть задан фиктивный 0.
26384горизонтальное разрешение изображения. (пикселей на метр, целое число со знаком)
2A424вертикальное разрешение изображения. (пикселей на метр, целое число со знаком)
2E464количество цветов в цветовой палитре, или от 0 по умолчанию до 2
32504количество используемых важных цветов, или 0, когда каждый цвет является важный; обычно игнорируется

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

ЗначениеОпределяется поМетод сжатияКомментарии
0BI_RGBнетНаиболее часто встречается
1BI_RLE8RLE 8 бит / пиксельМожет использоваться только с растровыми изображениями 8 бит / пиксель
2BI_RLE4RLE 4 бит / пиксельМожет использоваться только с растровыми изображениями 4 бит / пиксель
3BI_BITFIELDSOS22XBITMAPHEADER : Huffman 1DBITMAPV2INFOHEADER: маски битовых полей RGB,. BITMAPV3INFOHEADER + : RGBA
4BI_JPEGOS22XBITMAPHEADER : RLE-24BITMAPV4INFOHEADER + : JPEG изображение для печати <30416>BI_PNG BITMAPV4INFOHEADER + : PNG изображение для печати
6BI_ALPHABITFIELDSмаски битовых полей RGBAтолько Windows CE 5.0 с.NET 4.0 или позднее
11BI_CMYKнеттолько метафайл Windows CMYK
12BI_CMYKRLE8Только RLE-8Метафайл Windows CMYK
13BI_CMYKRLE4RLE-4только Метафайл Windows CMYK

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

Смещение (шестнадцатеричное)Смещение (десятичное)Размер (байты)OS / 2 OS22XBITMAPHEADER (BITMAPINFOHEADER2)
36542Перечислимое значение, определяющее единицы для горизонтального и вертикального разрешения (смещения 38 и 42). Единственное определенное значение - 0, что означает количество пикселей на метр
38562Padding. Игнорируется и должно быть нулевым
3A582Перечислимое значение, указывающее направление, в котором биты заполняют битовую карту. Единственное определенное значение - 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 в пикселях, соответственно, используемого образца полутонового изображения

Цвет table

Цветовая таблица (палитра) находится в файле изображения 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 несколько заполненных строк сохраняются последовательно, образуя массив пикселей.

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

RowSize = ⌈ BitsPerPixel ⋅ ImageWidth 32 ⌉ ⋅ 4 = ⌊ BitsPerPixel ⋅ ImageWidth + 31 32 ⌋ ⋅ 4, {\ displaystyle {\ text {RowSize}} = \ left \ lceil {\ frac {{\ text {BitsPerPixel}} \ cdot {\ text {ImageWidth}}} {32}} \ right \ rceil \ cdot 4 = \ left \ lfloor {\ frac {{\ text {BitsPerPixel}} \ cdot {\ text {ImageWidth}} + 31} {32}} \ right \ rfloor \ cdot 4,}{\ displaystyle {\ text {RowSize}} = \ left \ lceil {\ frac {{\ text {BitsPerPixel}} \ cdot {\ text {ImageWidth}}} { 32}} \ right \ rceil \ cdot 4 = \ left \ lfloor {\ frac {{\ text {BitsPerPixel}} \ cdot {\ text {ImageWidth}} + 31} {32}} \ right \ rfloor \ cdot 4, }
ImageWidth выражается в пикселях. В приведенном выше уравнении используются функции пола и потолка..

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

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

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

Массив пикселей представляет собой блок 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 байтов данных без заполнения.

Сжатие

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

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

  • Формат 1 бит на пиксель (1 бит на пиксель) поддерживает 2 различных цвета, (например: черно-белый). Значения пикселей хранятся в каждом бите, причем первый (крайний левый) пиксель находится в самом старшем бите первого байта. Каждый бит - это индекс в таблице из 2 цветов. Неустановленный бит будет относиться к первой записи таблицы цветов, а установленный бит будет относиться к последней (второй) записи таблицы цветов.
  • Формат 2 бита на пиксель (2bpp) поддерживает 4 различных цвета и сохраняет 4 пикселя на 1 байт, крайний левый пиксель находится в двух старших разрядах (только Windows CE :). Каждое значение пикселя представляет собой 2-битный индекс в таблице, содержащей до 4 цветов.
  • Формат 4-бит на пиксель (4bpp) поддерживает 16 различных цветов и сохраняет 2 пикселя на 1 байт, крайний левый пиксель находится в более значимом полубайте. Каждое значение пикселя представляет собой 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 бит на каждый образец).
  • Формат 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 (только Windows CE ).

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

RGB

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

Подтипы несжатого видео RGB
RGBAXПодтип RGBRGBAXПодтип 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
Битовое полеСмещениеБиты A2R10G 10B10Биты A2B10G10R10
Красный36h00 00 F0 3FLE: 3FF000002029FF 03 00 00LE : 000003FF09
Зеленый3Ah00 FC 0F 00LE: 000FFC00101900 FC 0F 00LE: 000FFC001019
Синий3EhFF 03 00 00LE: 000003FF0900 00 F0 3FLE: 3FF000002029
Alpha42h00 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 и monob; т.е. bgra был единственным поддерживаемым форматом пикселей с прозрачностью.

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

Пример 1

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

СмещениеРазмерШестнадцатеричное значениеЗначениеОписание
Заголовок BMP
0h242 4D"BM"Поле идентификатора (42h, 4Dh)
2h446 00 00 0070 байтов (54 + 16)Размер файла BMP (54 байта заголовка + 16 байтов данных)
6h200 00Не используетсяЗависит от приложения
8h200 00Не используетсяЗависит от приложения
Ah436 00 00 0054 байта (14 + 40)Смещение массива пикселей (данные растрового изображения) можно найти
Заголовок DIB
Eh428 00 00 0040 байтовКоличество байтов в заголовке DIB (с этого момента)
12h402 00 00 002 пикселя (порядок слева направо)Ширина растрового изображения в пикселях
16h402 00 00 002 пикселей (порядок снизу вверх)Высота растрового изображения в пикселях. Положительно для порядка пикселей снизу вверх.
1Ah201 001 плоскостьКоличество используемых цветовых плоскостей
1Ch218 0024 битаЧисло бит на пиксель
1Eh400 00 00 000BI_RGB, сжатие массива пикселей не используется
22h410 00 00 0016 байтовРазмер необработанных данных растрового изображения (включая заполнение)
26h413 0B 00 002835 пикселей / метр по горизонталиРазрешение печати изображения,. 72 DPI × 39,3701 дюйма на метр дает 2834,6472
2Ah413 0B 00 002835 пикселей / метр по вертикали
2Eh400 00 00 000 цветовКоличество цветов в палитре
32h400 00 00 000 важных цветов0 означает, что все цвета важны
Начало массива пикселей (данные растрового изображения)
36h300 00 FF0 0 255Красный, пиксель (0,1)
39h3FF FF FF255 255 255Белый, пиксель (1,1)
3Ch200 000 0Заполнение для 4-байтового выравнивания (может быть значением, отличным от нуля)
3Eh3FF 00 00255 0 0Синий, пиксель (0,0)
41h300 FF 000 255 0Зеленый, Пиксель (1,0)
44h200 000 0Заполнение для 4-байтового выравнивания (может быть другое значение чем ноль)
О это изображение Пример 2 растрового изображения 4 × 2 пикселя с кодировкой 32 бит / пиксель

Пример 2

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

СмещениеРазмерШестнадцатеричное значениеЗначениеОписание
Заголовок BMP
0h242 4D"BM"Поле идентификатора (42h, 4Dh)
2h49A 00 00 00154 байта (122 + 32)Размер файла BMP
6h200 00Не используетсяЗависит от приложения
8h200 00Не используетсяЗависит от приложения
Ah47A 00 00 00122 байта (14 + 108)Смещение, где находится массив пикселей (данные растрового изображения)
Заголовок DIB
Eh46C 00 00 00108 байтовКоличество байтов в заголовке DIB (с этого момента)
12h404 00 00 004 пикселя (порядок слева направо)Ширина растрового изображения в пикселях
16h402 00 00 002 пикселя (порядок снизу вверх)Высота растрового изображения в пикселях
1Ah201 001 плоскостьКоличество используемых цветовых плоскостей
1Ch220 0032 битаЧисло битов на пиксель
1Eh403 00 00 003BI_BITFIELDS, сжатие массива пикселей не используется
22h420 00 00 0032 байтаРазмер необработанных данных растрового изображения (включая заполнение)
26h413 0B 00 002835 pixels/metre horizontalPrint resolution of the image,. 72 DPI × 39.3701 inches per metre yields 2834.6472
2Ah413 0B 00 002835 pixels/metre vertical
2Eh400 00 00 000 colorsNumber of colors in the palette
32h400 00 00 000 important colors0 means all colors are important
36h400 00 FF 0000FF0000 in big-endianRed channel bit mask (valid because BI_BITFIELDS is specified)
3Ah400 FF 00 000000FF00 in big-endianGreen channel bit mask ( valid because BI_BITFIELDS is specified)
3Eh4FF 00 00 00000000FF in big-endianBlue channel bit mask (valid because BI_BITFIELDS is specified)
42h400 00 00 FFFF000000 in big-endianAlpha chan nel bit mask
46h420 6E 69 57little-endian "Win"LCS_WINDOWS_COLOR_SPACE
4Ah24h24h* 00...00 CIEXYZTRIPLE Конечные точки цветового пространстваНе используются для LCS «Win» или «sRGB"
6Eh400 00 00 000 Красная ГаммаНе используется для LCS «Win» или «sRGB"
72h400 00 00 000 Зеленая гаммаНе используется для LCS «Win» или «sRGB"
76h400 00 00 000 Голубая гаммаНе используется для LCS» Win"или" sRGB"
Начало массива пикселей (данные растрового изображения)
7Ah4FF 00 00 7F255 0 0 127Синий (Альфа: 127), Пиксель (1,0)
7Eh400 FF 00 7F0 255 0 127Зеленый (Альфа: 127), Пиксель (1, 1)
82h400 00 FF 7F0 0 255 127Красный (Alpha: 127), Pixel (1,2)
86h4FF FF FF 7F255 255 255 127Белый (Alpha: 127), Pixel (1,3)
8Ah4FF 00 00 FF255 0 0 255Синий (Alpha: 255), Pixel (0,0)
8Eh400 FF 00 FF0 255 0 255Зеленый (Alpha: 255), пиксель (0,1)
92h400 00 FF FF0 0 255 255Красный (Альфа: 255), Пиксель (0,2)
96h4FF FF FF FF255 255 255 255 255Белый (Альфа: 255), Пиксель (0,3)

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

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

Простота формата файла 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 может содержать информацию о прозрачности.

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-11 03:41:27
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте