Формат файла BMP
Расширение имени файла | .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 [ править ]
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. Возможны следующие записи:
|
02 | 2 | 4 байта | Размер файла BMP в байтах |
06 | 6 | 2 байта | Сдержанный; фактическое значение зависит от приложения, создающего изображение, если оно создано вручную, может быть равно 0 |
08 | 8 | 2 байта | Сдержанный; фактическое значение зависит от приложения, создающего изображение, если оно создано вручную, может быть равно 0 |
0А | 10 | 4 байта | Смещение, т.е. начальный адрес, байта, в котором могут быть найдены данные растрового изображения (массив пикселей). |
Заголовок DIB (заголовок информации о растровом изображении) [ править ]
Этот блок байтов сообщает приложению подробную информацию об изображении, которая будет использоваться для отображения изображения на экране. Блок также соответствует заголовку, используемому внутри Windows и OS/2, и имеет несколько различных вариантов. Все они содержат поле dword (32-битное), определяющее их размер, чтобы приложение могло легко определить, какой заголовок используется в изображении. Причина существования разных заголовков заключается в том, что Microsoft несколько раз расширяла формат DIB. Новые расширенные заголовки можно использовать с некоторыми функциями GDI вместо старых, обеспечивая большую функциональность. Поскольку GDI поддерживает функцию загрузки растровых файлов, типичные приложения Windows используют эту функцию. Одним из последствий этого является то, что для таких приложений поддерживаемые ими форматы BMP соответствуют форматам, поддерживаемым используемой версией Windows. Дополнительную информацию смотрите в таблице ниже.
Размер | Название заголовка | Поддержка ОС | Функции | Написал |
---|---|---|---|---|
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] |
---|---|---|---|
0Е | 14 | 4 | Размер этого заголовка (12 байт) |
12 | 18 | 2 | Ширина растрового изображения в пикселях (беззнаковые 16 бит). |
14 | 20 | 2 | Высота растрового изображения в пикселях (беззнаковые 16 бит) |
16 | 22 | 2 | Количество цветовых плоскостей должно быть 1. |
18 | 24 | 2 | Количество бит на пиксель |
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] |
---|---|---|---|
0Е | 14 | 4 | размер этого заголовка, в байтах (40) |
12 | 18 | 4 | ширина растрового изображения в пикселях (целое число со знаком) |
16 | 22 | 4 | высота растрового изображения в пикселях (целое число со знаком) |
1А | 26 | 2 | количество цветовых плоскостей (должно быть 1) |
1С | 28 | 2 | количество бит на пиксель, которое является глубиной цвета изображения. Типичные значения: 1, 4, 8, 16, 24 и 32. |
1Е | 30 | 4 | используемый метод сжатия. В следующей таблице приведен список возможных значений. |
22 | 34 | 4 | размер изображения. Это размер необработанных растровых данных; для растровых изображений BI_RGB можно задать фиктивный 0. |
26 | 38 | 4 | горизонтальное разрешение изображения. (пикселей на метр, целое число со знаком) |
2А | 42 | 4 | вертикальное разрешение изображения. (пикселей на метр, целое число со знаком) |
2Е | 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 | Прокладка. Игнорируется и должно быть равно нулю |
3А | 58 | 2 | Перечисляемое значение, указывающее направление, в котором биты заполняют растровое изображение. Единственное определенное значение — 0, что означает, что начало координат — левый нижний угол. Биты заполняются слева направо, а затем снизу вверх. Обратите внимание, что растровые изображения Windows (которые не включают это поле) также могут указывать начало координат в верхнем левом углу (биты заполняются слева направо, затем сверху вниз), используя отрицательное значение высоты изображения. |
3С | 60 | 2 | Перечислимое значение, указывающее алгоритм полутонового изображения, который следует использовать при рендеринге изображения. |
40 | 64 | 4 | Параметр полутонового изображения 1 (см. ниже) |
44 | 68 | 4 | Параметр полутонов 2 (см. ниже) |
48 | 72 | 4 | Перечисляемое значение, указывающее кодировку цвета для каждой записи в таблице цветов. Единственное определенное значение — 0, обозначающее RGB. |
4С | 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 Заголовок BITMAPINFOHEADER можно использовать с 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 несколько дополненных строк сохраняются последовательно, образуя пиксельный массив.
Общее количество байтов, необходимое для хранения одной строки пикселей, можно рассчитать как:
Общее количество байтов, необходимое для хранения массива пикселей в изображении n бит на пиксель (bpp), при этом 2 н цветов, можно рассчитать, принимая во внимание эффект округления размера каждой строки до кратного 4 байтам, следующим образом:
Массив пикселей (растровые данные) [ править ]
Массив пикселей представляет собой блок 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 байтов данных и без заполнения.
Сжатие [ править ]
- Индексированные цветные изображения могут быть сжаты с помощью 4-битного или 8-битного алгоритма RLE или Huffman 1D.
- ОС/2 BITMAPCOREHEADER 2 Изображения размером 24 бита на пиксель можно сжимать с помощью 24-битного алгоритма RLE.
- Изображения с разрешением 16 бит на пиксель и 32 бита на пиксель всегда сохраняются в несжатом виде.
- Обратите внимание, что изображения любой глубины цвета при желании можно сохранять без сжатия.
Формат пикселей [ править ]
- Формат 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, которые представляют собой битовые маски, определяющие принадлежность определенной группы битов в пикселе к определенному каналу . Следующая диаграмма определяет этот механизм:
Поля выборки, определенные битовыми масками BITFIELDS, должны быть смежными и неперекрывающимися, но порядок полей выборки произвольный. Наиболее распространенный порядок полей: Альфа, Синий, Зеленый, Красный (от старшего до младшего бита). Красная, зеленая и синяя битовые маски действительны только в том случае, если для элемента Compression заголовка DIB установлено значение BI_BITFIELDS. Маска альфа-бита действительна всякий раз, когда она присутствует в заголовке DIB или когда для элемента Compression заголовка DIB установлено значение BI_ALPHABITFIELDS. [6] ( только для Windows CE ).
Подтипы RGB-видео [ править ]
Описанный выше механизм BIFIELD позволяет определять десятки тысяч различных форматов пикселей, однако на практике используются лишь некоторые из них. [22] все форматы палитр RGB8, RGB4 и RGB1 (отмечены желтым цветом в таблице выше, определены в dshow.h
имена .MEDIASUBTYPE):
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 |
Битовое поле | Компенсировать | Биты A2R10G10B10 | Биты A2B10G10R10 | ||||
---|---|---|---|---|---|---|---|
Красный | 36 часов | 00 00 F0 3F | ТЕМ: 3FF00000 | 20 ... 29 | FF 03 00 00 | ТЕМ: 000003FF | 0 ... 9 |
Зеленый | 3Ач | 00 FC 0F 00 | ТЕМ: 000FFC00 | 10 ... 19 | 00 FC 0F 00 | ТЕМ: 000FFC00 | 10 ... 19 |
Синий | 3Эх | FF 03 00 00 | ТЕМ: 000003FF | 0 ... 9 | 00 00 F0 3F | ТЕМ: 3FF00000 | 20 ... 29 |
Альфа | 42 часа | 00 00 00 C0 | ТЕМ: C0000000 | 30 ... 31 | 00 00 00 C0 | ТЕМ: C0000000 | 30 ... 31 |
В версии 2.1.4 FFmpeg поддерживал (в собственной терминологии) форматы пикселей BMP bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, Gray, pal8 и monob ; т. е. bgra был единственным поддерживаемым форматом пикселей с прозрачностью. [24]
Пример 1 [ править ]
Ниже приведен пример 24-битного растрового изображения размером 2×2 пикселя (заголовок Windows DIB). BITMAPINFOHEADER ) с форматом пикселей RGB24.
Компенсировать | Размер | Шестнадцатеричное значение | Ценить | Описание |
---|---|---|---|---|
Заголовок БМП | ||||
0ч | 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 самолет | Количество используемых цветовых плоскостей |
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) |
3Ч | 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 байта (может быть значением, отличным от нуля) |
Пример 2 [ править ]
Ниже приведен пример 32-битного растрового изображения размером 4×2 пикселя со значениями непрозрачности в альфа-канале (заголовок Windows DIB). BITMAPV4HEADER ) с форматом пикселей ARGB32.
Компенсировать | Размер | Шестнадцатеричное значение | Ценить | Описание |
---|---|---|---|---|
Заголовок БМП | ||||
0ч | 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 самолет | Количество используемых цветовых плоскостей |
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 может содержать информацию о прозрачности.
Ссылки [ править ]
- ^ «Соображения IANA» . Типы носителей изображений Windows . сек. 5. дои : 10.17487/RFC7903 . РФК 7903 .
- ^ Jump up to: Перейти обратно: а б с Джеймс Д. Мюррей; Уильям ванРайпер (апрель 1996 г.). Энциклопедия форматов графических файлов (второе изд.). О'Рейли . бмп . ISBN 1-56592-161-5 . Проверено 7 марта 2014 г.
- ^ Jump up to: Перейти обратно: а б с д и ж г час Джеймс Д. Мюррей; Уильям ванРайпер (апрель 1996 г.). Энциклопедия форматов графических файлов (второе изд.). О'Рейли . os2bmp . ISBN 1-56592-161-5 . Проверено 7 марта 2014 г.
- ^ Jump up to: Перейти обратно: а б «[MS-WMF]: формат метафайла Windows» . MSDN . 13 февраля 2014 г. Проверено 12 марта 2014 г.
- ^ Jump up to: Перейти обратно: а б с д и ж г час я дж «DIB и их использование» . Справка и поддержка Microsoft . Проверено 14 мая 2015 г.
- ^ Jump up to: Перейти обратно: а б с MSDN- BITMAPINFOHEADER (Windows CE 5.0): BI_ALPHABITFIELDS в элементе biCompression
- ^ Jump up to: Перейти обратно: а б с MSDN Типы заголовков растровых изображений
- ^ Jump up to: Перейти обратно: а б с MSDN BITMAPINFO Структура
- ^ Фэн Юань - Графическое программирование для Windows: Win32 GDI и DirectDraw: упакованное независимое от устройства растровое изображение (CreateDIBPatternBrush, CreateDIBPatternBrushPt, FindResource, LoadResource, LockResource)
- ^ Саммерс, Джейсон (30 октября 2015 г.). "pal8os2v2-16.bmp" . Проверено 6 июля 2016 г.
- ^ Саммерс, Джейсон (30 октября 2015 г.). «БМП Люкс» . Проверено 6 июля 2016 г.
- ^ Кокс, Крис (15 ноября 2010 г.). «Неверный формат BMP с альфа-каналом» . Photoshop для Windows Форум . Adobe . Архивировано из оригинала 27 января 2015 г. Проверено 22 мая 2016 г.
- ^ «Растровое изображение Microsoft Windows: сводка из Энциклопедии форматов графических файлов» .
- ^ Jump up to: Перейти обратно: а б «Расширения JPEG и PNG для определенных функций и структур растровых изображений» .
- ^ MSDN - BITMAPV4HEADER : член bV4AlphaMask.
- ^ MSDN - RGBQUAD: член rgbReserved
- ^ см. примечание в разделе biClrUsed MSDN. БИТМАПИНОЗАГОЛОВОК
- ^ «Image Stride — приложения Win32» . Learn.microsoft.com .
- ^ MSDN - BITMAPINFOHEADER : член biBitCount.
- ^ «Типы растровых изображений» . MSDN . 03.06.2012 . Проверено 16 марта 2014 г.
- ^ MSDN: Windows CE - BITMAPINFOHEADER Структура
- ^ Jump up to: Перейти обратно: а б Adobe Photoshop: формат BMP , заархивировано 22 сентября 2011 г. на Wayback Machine.
- ^ Jump up to: Перейти обратно: а б «Подтипы несжатого видео RGB» . dshow.h . MSDN . Проверено 11 марта 2014 г.
- ^ «Форматы изображений» . FFmpeg Общая документация . 2014 . Проверено 23 февраля 2014 г.
- ^ Джулиан Смарт; Стефан Чомор и Кевин Хок (2006). Кроссплатформенное программирование графического интерфейса с помощью Wxwidgets . Прентис Холл. ISBN 0-13-147381-6 .
- ^ «Файл растрового изображения (BMP), версия 5» . Цифровое сохранение . Библиотека Конгресса . 8 января 2014 г. Проверено 11 марта 2014 г.
Внешние ссылки [ править ]
- Структура растрового файла на digicamsoft.com.
- Введение в DIB (независимые от устройства растровые изображения) на сайте herdsoft.com.
- Простой класс C++ для загрузки растровых изображений на сайте kalytta.com (A2R10G10B10 пока нет). [update] поддерживается)
- Формат файла BMP, часть 1. Дэвид Чарлап из журнала программных инструментов доктора Добба (drdobbs.com), март 1995 г.