Jump to content

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

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

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

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

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

[ редактировать ]
Схема 1 – Структура файла растрового изображения
Схема 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 различных версий)
Для хранения подробной информации о растровом изображении и определения формата пикселей. Сразу следует за заголовком растрового файла.
Дополнительные битовые маски Да 3 или 4 DWORD [6]
(12 или 16 байт)
Чтобы определить формат пикселей Присутствует только в том случае, если заголовок DIB является BITMAPINFOHEADER , а для элемента метода сжатия установлено значение BI_BITFIELDS или BI_ALPHABITFIELDS.
Таблица цветов Полу-необязательный Переменный размер Чтобы определить цвета, используемые данными растрового изображения (массив пикселей) Обязательно для глубины цвета ≤ 8 бит.
разрыв1 Да Переменный размер Выравнивание структуры Артефакт смещения файла в массив пикселей в заголовке файла растрового изображения.
Пиксельный массив Нет Переменный размер Чтобы определить фактические значения пикселей Формат пикселей определяется заголовком DIB или дополнительными битовыми масками. Каждая строка в массиве пикселей дополняется до размера, кратного 4 байтам.
разрыв2 Да Переменный размер Выравнивание структуры Артефакт поля смещения данных профиля ICC в заголовке DIB.
Цветовой профиль ICC Да Переменный размер Определение цветового профиля для управления цветом Также может содержать путь к внешнему файлу, содержащему цветовой профиль. При загрузке в память как «неупакованный DIB» он располагается между таблицей цветов и Gap1. [7]

DIB в памяти

[ редактировать ]

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

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

Заголовок растрового файла

[ редактировать ]

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

Смещенный шестигранник Смещение декабря Размер Цель
00 0 2 байта Поле заголовка , используемое для идентификации файлов BMP и DIB: 0x42 0x4D в шестнадцатеричном формате , то же, что и BM в ASCII. Возможны следующие записи:
БМ
Windows 3.1x, 95, NT и т. д.
НЕТ
Массив растровых изображений структуры OS/2
ТАМ
Значок цвета структуры OS/2
КП
Константный указатель цвета OS/2
IC
Значок структуры OS/2
ПТ
Указатель OS/2
02 2 4 байта Размер файла BMP в байтах
06 6 2 байта Сдержанный; фактическое значение зависит от приложения, создающего изображение, если оно создано вручную, может быть равно 0
08 8 2 байта Сдержанный; фактическое значение зависит от приложения, создающего изображение, если оно создано вручную, может быть равно 0
10 4 байта Смещение, т.е. начальный адрес, байта, в котором могут быть найдены данные растрового изображения (массив пикселей).

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

[ редактировать ]

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

Заголовки растровых изображений Windows и OS/2
Размер Название заголовка Поддержка ОС Функции Написал
12 БИТМАПКОРЗАГОЛОВОК
OS21XBITMAPHEADER
Windows 2.0 или новее
ОС/2 1.x [3]
64 OS22XBITMAPHEADER ОС/2 БИТМАПКОРЗАГОЛОВОК 2 Добавляет полутона . Добавляет сжатие RLE и Huffman 1D.
16 OS22XBITMAPHEADER Этот вариант предыдущего заголовка содержит только первые 16 байтов, а остальные байты считаются нулевыми значениями. [3]

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

40 БИТМАПИНОЗАГОЛОВОК Windows NT , 3.1x или новее [2] Увеличивает ширину и высоту растрового изображения до 4 байтов. Добавляет форматы 16 бит на пиксель и 32 бита на пиксель. Добавляет сжатие RLE.
52 БИТМАПВ2ИНФОХЕДЕР Недокументированный Добавляет битовые маски RGB. Adobe Фотошоп
56 БИТМАПВ3ИНФОХЕДЕР Официально не задокументировано, но эта документация была размещена на форумах Adobe сотрудником Adobe с заявлением о том, что стандарт когда-то в прошлом был включен в официальную документацию MS. [12] Добавляет битовую маску альфа-канала . Adobe Фотошоп
108 БИТМАПВ4ХЕДЕР Windows NT 4.0 , 95 или новее Добавляет тип цветового пространства и гамма-коррекцию.
124 БИТМАПВ5ЗАГОЛОВОК Windows NT 5.0 , 98 или новее Добавляет цветовые профили ICC. GIMP
Смещение (шестнадцатеричное) Смещение (декабрь) Размер (байты) ОС/2 1.x БИТМАПКОРЗАГОЛОВОК [3]
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 (показанного в таблице выше) тем, что поля ширины и высоты изображения представляют собой целые числа со знаком, а не без знака. [13]

Версии после BITMAPINFOHEADER добавляет поля только в конец заголовка предыдущей версии. Например: BITMAPV2INFOHEADER добавляет поля в БИТМАПИНФОХЕДЕР и BITMAPV3INFOHEADER добавляет поля в БИТМАПВ2ИНФОЗАГОЛОВОК .

Интегрированный альфа-канал был представлен в недокументированной версии. 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 . Описание смотрите в следующей таблице. Все значения сохраняются как целые числа без знака, если не указано иное.

Смещение (шестнадцатеричное) Смещение (декабрь) Размер (байты) Окна БИТМАПИНОЗАГОЛОВОК [2]
14 4 размер этого заголовка, в байтах (40)
12 18 4 ширина растрового изображения в пикселях (целое число со знаком)
16 22 4 высота растрового изображения в пикселях (целое число со знаком)
26 2 количество цветовых плоскостей (должно быть 1)
28 2 количество бит на пиксель, которое является глубиной цвета изображения. Типичные значения: 1, 4, 8, 16, 24 и 32.
30 4 используемый метод сжатия. В следующей таблице приведен список возможных значений.
22 34 4 размер изображения. Это размер необработанных растровых данных; для растровых изображений BI_RGB можно задать фиктивный 0.
26 38 4 горизонтальное разрешение изображения. (пикселей на метр, целое число со знаком)
42 4 вертикальное разрешение изображения. (пикселей на метр, целое число со знаком)
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 : Хаффман 1D BITMAPV2INFOHEADER : маски битовых полей RGB,
BITMAPV3INFOHEADER + : RGBA
4 BI_JPEG OS22XBITMAPHEADER : RLE-24 BITMAPV4INFOHEADER + : изображение JPEG для печати. [14]
5 BI_PNG BITMAPV4INFOHEADER + : изображение PNG для печати. [14]
6 BI_ALPHABITFIELDS Маски битовых полей RGBA только Windows CE 5.0 с .NET 4.0 или более поздней версии
11 BI_CMYK никто только метафайл Windows CMYK [4]
12 BI_CMYKRLE8 РЛЭ-8 только метафайл Windows CMYK
13 BI_CMYKRLE4 РЛЭ-4 только метафайл Windows CMYK

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

Смещение (шестнадцатеричное) Смещение (декабрь) Размер (байты) ОС/2 OS22XBITMAPHEADER ( БИТМАПИНОЗАГОЛОВОК2 ) [3]
36 54 2 Перечисляемое значение, определяющее единицы разрешения по горизонтали и вертикали (смещения 38 и 42). Единственное определенное значение — 0, что означает количество пикселей на метр.
38 56 2 Прокладка. Игнорируется и должно быть равно нулю
58 2 Перечисляемое значение, указывающее направление, в котором биты заполняют растровое изображение. Единственное определенное значение — 0, что означает, что начало координат — левый нижний угол. Биты заполняются слева направо, а затем снизу вверх.

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

60 2 Перечисляемое значение, указывающее алгоритм полутонового изображения, который следует использовать при рендеринге изображения.
40 64 4 Параметр полутонового изображения 1 (см. ниже)
44 68 4 Параметр полутонов 2 (см. ниже)
48 72 4 Перечисляемое значение, указывающее кодировку цвета для каждой записи в таблице цветов. Единственное определенное значение — 0, обозначающее RGB.
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 (12 байт) или BI_ALPHABITFIELDS (16 байт). Следовательно, его смещение равно размеру BITMAPFILEHEADER плюс размер заголовка DIB (плюс дополнительные 12–16 байт для трех- или четырехбитовых масок).
Примечание. В Windows CE Заголовок BI_ALPHABITFIELDS можно использовать с заголовком BI_ALPHABITFIELDS. [6] опция в элементе biCompression.

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

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

Массив пикселей (растровые данные)

[ редактировать ]

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

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

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

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

[ редактировать ]
  • Формат 1 бит на пиксель (1 бит на пиксель) поддерживает два разных цвета (например: черный и белый). Значения пикселей хранятся в каждом бите, при этом первый (крайний левый) пиксель находится в самом старшем бите первого байта. [5] Каждый бит представляет собой индекс таблицы двух цветов. Неустановленный бит будет относиться к первой записи таблицы цветов, а установленный бит будет относиться к последней (второй) записи таблицы цветов.
  • Формат 2 бита на пиксель (2bpp) поддерживает 4 различных цвета и сохраняет 4 пикселя на 1 байт, при этом самый левый пиксель находится в двух старших битах ( только для Windows CE : [21] ). Каждое значение пикселя представляет собой 2-битный индекс в таблице, содержащей до 4 цветов.
  • Формат 4 бита на пиксель (4bpp) поддерживает 16 различных цветов и сохраняет 2 пикселя на 1 байт, при этом самый левый пиксель находится в более значимом полубайте . [5] Каждое значение пикселя представляет собой 4-битный индекс в таблице, содержащей до 16 цветов.
  • Формат 8 бит на пиксель (8bpp) поддерживает 256 различных цветов и сохраняет 1 пиксель на 1 байт. Каждый байт представляет собой индекс таблицы, содержащей до 256 цветов.
  • Формат 16 бит на пиксель (16 бит на пиксель) поддерживает 65536 различных цветов и сохраняет 1 пиксель на 2-байтовое СЛОВО. Каждое СЛОВО может определять альфа, красный, зеленый и синий образцы пикселя.
  • Формат 24 бита на пиксель (24 бита на пиксель) поддерживает 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, должны быть смежными и неперекрывающимися, но порядок полей выборки произвольный. Самый распространенный порядок полей: Альфа, Синий, Зеленый, Красный (от старшего до младшего бита). Красная, зеленая и синяя битовые маски действительны только в том случае, если для элемента Compression заголовка DIB установлено значение BI_BITFIELDS. Маска альфа-бита действительна всякий раз, когда она присутствует в заголовке DIB или когда для элемента Compression заголовка DIB установлено значение BI_ALPHABITFIELDS. [6] ( только для Windows CE ).

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

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

[ редактировать ]

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

Подтипы несжатого видео RGB [23]
RGBAX Подтип RGB RGBAX Подтип ARGB
8.8.8.0.8 RGB32 8.8.8.8.0 ARGB32
10.10.10.2.0 А2Р10Г10Б10
8.8.8.0.0 RGB24 10.10.10.2.0 А2Б10Г10Р10
5.6.5.0.0 RGB565 4.4.4.4.0 АРГБ4444
5.5.5.0.1 RGB555 5.5.5.1.0 АРГБ1555
Битовые поля для десяти бит RGB [23]
Битовое поле Компенсировать Биты A2R10G10B10 Биты A2B10G10R10
Красный 36 часов 00 00 F0 3FТЕМ: 3FF0000020... 29FF 03 00 00ТЕМ: 000003FF 0...  9
Зеленый 3Ач 00 FC 0F 00ТЕМ: 000FFC0010... 1900 FC 0F 00ТЕМ: 000FFC0010... 19
Синий 3Эх FF 03 00 00ТЕМ: 000003FF 0...  900 00 F0 3FТЕМ: 3FF0000020... 29
Альфа 42 часа 00 00 00 C0ТЕМ: C000000030... 3100 00 00 C0ТЕМ: C000000030... 31

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

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

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

Компенсировать Размер Шестнадцатеричное значение Ценить Описание
Заголовок БМП
2 42 4Д "БМ" Поле идентификатора (42h, 4Dh)
2 часа 4 46 00 00 00 70 байт (54+16) Размер файла BMP (заголовок 54 байта + данные 16 байт).
6 часов 2 00 00 Неиспользованный Для конкретного приложения
8 часов 2 00 00 Неиспользованный Для конкретного приложения
Ах 4 36 00 00 00 54 байта (14+40) Смещение, где можно найти массив пикселей (растровые данные).
DIB-заголовок
Эх 4 28 00 00 00 40 байт Количество байтов в заголовке DIB (с этого момента)
12 часов 4 02 00 00 00 2 пикселя (порядок слева направо) Ширина растрового изображения в пикселях
16 часов 4 02 00 00 00 2 пикселя (порядок снизу вверх) Высота растрового изображения в пикселях. Положительный для порядка пикселей снизу вверх.
1 Ач 2 01 00 1 самолет Количество используемых цветовых плоскостей
2 18 00 24 бита Количество бит на пиксель
1Эх 4 00 00 00 00 0 BI_RGB, сжатие массива пикселей не используется.
22 часа 4 10 00 00 00 16 байт Размер необработанных растровых данных (включая заполнение)
26 часов 4 13 0Б 00 00 2835 пикселей/метр по горизонтали Разрешение печати изображения,
72 DPI × 39,3701 дюйма на метр дает 2834,6472.
2Ач 4 13 0Б 00 00 2835 пикселей/метр по вертикали
2Эх 4 00 00 00 00 0 цветов Количество цветов в палитре
32 часа 4 00 00 00 00 0 важных цветов 0 означает, что все цвета важны
Начало массива пикселей (растровые данные)
36 часов 3 00 00 ПФ 0 0 255 Красный, Пиксель (x=0, y=1)
39 часов 3 ФФ ФФ ФФ 255 255 255 Белый, Пиксель (x=1, y=1)
2 00 00 0 0 Заполнение для выравнивания по 4 байта (может быть значением, отличным от нуля)
3Эх 3 ФФ 00 00 255 0 0 Синий, Пиксель (x=0, y=0)
41 час 3 00 ФФ 00 0 255 0 Зеленый, Пиксель (x=1, y=0)
44 часа 2 00 00 0 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 бита на пиксель.

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

Компенсировать Размер Шестнадцатеричное значение Ценить Описание
Заголовок БМП
2 42 4Д "БМ" Поле идентификатора (42h, 4Dh)
2 часа 4 9А 00 00 00 154 байта (122+32) Размер файла BMP
6 часов 2 00 00 Неиспользованный Для конкретного приложения
8 часов 2 00 00 Неиспользованный Для конкретного приложения
Ах 4 7А 00 00 00 122 байта (14+108) Смещение, где можно найти массив пикселей (растровые данные).
DIB-заголовок
Эх 4 6С 00 00 00 108 байт Количество байтов в заголовке DIB (с этого момента)
12 часов 4 04 00 00 00 4 пикселя (порядок слева направо) Ширина растрового изображения в пикселях
16 часов 4 02 00 00 00 2 пикселя (порядок снизу вверх) Высота растрового изображения в пикселях
1 Ач 2 01 00 1 самолет Количество используемых цветовых плоскостей
2 20 00 32 бита Количество бит на пиксель
1Эх 4 03 00 00 00 3 BI_BITFIELDS, сжатие массива пикселей не используется.
22 часа 4 20 00 00 00 32 байта Размер необработанных растровых данных (включая заполнение)
26 часов 4 13 0Б 00 00 2835 пикселей/метр по горизонтали Разрешение печати изображения,
72 DPI × 39,3701 дюйма на метр дает 2834,6472.
2Ач 4 13 0Б 00 00 2835 пикселей/метр по вертикали
2Эх 4 00 00 00 00 0 цветов Количество цветов в палитре
32 часа 4 00 00 00 00 0 важных цветов 0 означает, что все цвета важны
36 часов 4 00 00 ФФ 00 00FF0000 в прямом порядке Битовая маска красного канала (действительна, поскольку указан BI_BITFIELDS)
3Ач 4 00 ФФ 00 00 0000FF00 в обратном порядке Битовая маска зеленого канала (действительна, поскольку указан BI_BITFIELDS)
3Эх 4 ФФ 00 00 00 000000FF в прямом порядке Битовая маска синего канала (действительна, поскольку указан BI_BITFIELDS)
42 часа 4 00 00 00 ФФ FF000000 в прямом порядке Битовая маска альфа-канала
46 часов 4 20 6Э 69 57 с прямым порядком байтов " Win " LCS_WINDOWS_COLOR_SPACE
4 Ач 24 часа 24ч* 00...00 Конечные точки цветового пространства CIEXYZTRIPLE Не используется для LCS " Win " или " sRGB"
6Эх 4 00 00 00 00 0 Красная Гамма Не используется для LCS " Win " или " sRGB"
72 часа 4 00 00 00 00 0 Зелёная Гамма Не используется для LCS " Win " или " sRGB"
76 часов 4 00 00 00 00 0 Синяя Гамма Не используется для LCS " Win " или " sRGB"
Начало массива пикселей (данные растрового изображения)
7Ач 4 ФФ 00 00 7F 255 0 0 127 Синий (Альфа: 127), Пиксель (x=0, y=1)
7Эх 4 00FF 00 7F 0 255 0 127 Зеленый (Альфа: 127), Пиксель (x=1, y=1)
82 часа 4 00 00 ФФ 7F 0 0 255 127 Красный (Альфа: 127), Пиксель (x=2, y=1)
86 часов 4 ФФ ФФ ФФ 7F 255 255 255 127 Белый (Альфа: 127), Пиксель (x=3, y=1)
8Ач 4 ФФ 00 00 ФФ 255 0 0 255 Синий (Альфа: 255), Пиксель (x=0, y=0)
8Эх 4 00 ФФ 00 ФФ 0 255 0 255 Зеленый (Альфа: 255), Пиксель (x=1, y=0)
92 часа 4 00 00 ФФ ФФ 0 0 255 255 Красный (Альфа: 255), Пиксель (x=2, y=0)
96 часов 4 ФФ ФФ ФФ ФФ 255 255 255 255 Белый (Альфа: 255), Пиксель (x=3, y=0)

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

  1. ^ «Соображения IANA» . Типы носителей изображений Windows . сек. 5. дои : 10.17487/RFC7903 . РФК 7903 .
  2. ^ Перейти обратно: а б с Джеймс Д. Мюррей; Уильям ванРайпер (апрель 1996 г.). Энциклопедия форматов графических файлов (второе изд.). О'Рейли . бмп . ISBN  1-56592-161-5 . Проверено 7 марта 2014 г.
  3. ^ Перейти обратно: а б с д и ж г час Джеймс Д. Мюррей; Уильям ванРайпер (апрель 1996 г.). Энциклопедия форматов графических файлов (второе изд.). О'Рейли . os2bmp . ISBN  1-56592-161-5 . Проверено 7 марта 2014 г.
  4. ^ Перейти обратно: а б «[MS-WMF]: формат метафайла Windows» . MSDN . 13 февраля 2014 г. Проверено 12 марта 2014 г.
  5. ^ Перейти обратно: а б с д и ж г час я дж «DIB и их использование» . Справка и поддержка Microsoft . Проверено 14 мая 2015 г.
  6. ^ Перейти обратно: а б с MSDN- BITMAPINFOHEADER (Windows CE 5.0): BI_ALPHABITFIELDS в элементе biCompression
  7. ^ Перейти обратно: а б с MSDN Типы заголовков растровых изображений
  8. ^ Перейти обратно: а б с MSDN BITMAPINFO Структура
  9. ^ Фэн Юань - Графическое программирование для Windows: Win32 GDI и DirectDraw: упакованное независимое от устройства растровое изображение (CreateDIBPatternBrush, CreateDIBPatternBrushPt, FindResource, LoadResource, LockResource)
  10. ^ Саммерс, Джейсон (30 октября 2015 г.). "pal8os2v2-16.bmp" . Проверено 6 июля 2016 г.
  11. ^ Саммерс, Джейсон (30 октября 2015 г.). «БМП Люкс» . Проверено 6 июля 2016 г.
  12. ^ Кокс, Крис (15 ноября 2010 г.). «Неверный формат BMP с альфа-каналом» . Photoshop для Windows Форум . Adobe . Архивировано из оригинала 27 января 2015 г. Проверено 22 мая 2016 г.
  13. ^ «Растровое изображение Microsoft Windows: сводка из Энциклопедии форматов графических файлов» .
  14. ^ Перейти обратно: а б «Расширения JPEG и PNG для определенных функций и структур растровых изображений» .
  15. ^ MSDN - BITMAPV4HEADER : член bV4AlphaMask.
  16. ^ MSDN - RGBQUAD: член rgbReserved
  17. ^ см. примечание в разделе biClrUsed MSDN. БИТМАПИНОЗАГОЛОВОК
  18. ^ «Image Stride — приложения Win32» . Learn.microsoft.com .
  19. ^ MSDN - BITMAPINFOHEADER : член biBitCount.
  20. ^ «Типы растровых изображений» . MSDN . 03.06.2012 . Проверено 16 марта 2014 г.
  21. ^ MSDN: Windows CE - BITMAPINFOHEADER Структура
  22. ^ Перейти обратно: а б Adobe Photoshop: формат BMP , заархивировано 22 сентября 2011 г. на Wayback Machine.
  23. ^ Перейти обратно: а б «Подтипы несжатого видео RGB» . dshow.h . MSDN . Проверено 11 марта 2014 г.
  24. ^ «Форматы изображений» . FFmpeg Общая документация . 2014 . Проверено 23 февраля 2014 г.
  25. ^ Джулиан Смарт; Стефан Чомор и Кевин Хок (2006). Кроссплатформенное программирование графического интерфейса с помощью Wxwidgets . Прентис Холл. ISBN  0-13-147381-6 .
  26. ^ «Файл растрового изображения (BMP), версия 5» . Цифровое сохранение . Библиотека Конгресса . 8 января 2014 г. Проверено 11 марта 2014 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e9a6ca2b6053a88e38357a2665f77b93__1706902860
URL1:https://arc.ask3.ru/arc/aa/e9/93/e9a6ca2b6053a88e38357a2665f77b93.html
Заголовок, (Title) документа по адресу, URL1:
BMP file format - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)