[отпатрулированная версия] | [непроверенная версия] |
|
|
|
В битностях 8 и ниже цвет указывается индексом из таблицы цветов (палитры), а при бо́льших — непосредственным значением. |
|
В битностях 8 и ниже цвет указывается индексом из таблицы цветов (палитры), а при бо́льших — непосредственным значением. |
|
Цвет же в любом случае можно задать только в цветовой модели [[RGB]] (как при непосредственном указании в пикселе, так и в таблице цветов), но в битностях 16 и 32 можно получить [[Grayscale]] с глубиной до 16 и 32 бит, соответственно. |
|
Цвет же в любом случае можно задать только в цветовой модели [[RGB]] (как при непосредственном указании в пикселе, так и в таблице цветов), но в битностях 16 и 32 можно получить [[Grayscale]] с глубиной до 16 и 32 бит, соответственно. |
|
Частичная прозрачность реализована [[альфа-канал]]ом различных битностей, но при этом прозрачность без градаций можно косвенно получить RLE-кодированием. |
|
Частичная прозрачность реализована [[альфа-канал]]ом битностей от 16 бит и выше. |
|
|
|
|
|
В большинстве случаев пиксели хранятся в виде относительно простого двумерного массива. Для битностей 4 и 8 доступно [[RLE]]-кодирование, которое может уменьшить их размер. Формат BMP также поддерживает встраивание данных в форматах [[JPEG]] и [[PNG]]. Но последнее скорее больше предназначено не для компактного хранения, а для обхода ограничений архитектуры GDI, которая не предусматривает прямую работу с изображениями отличных от BMP форматов. |
|
В большинстве случаев пиксели хранятся в виде относительно простого двумерного массива. Для битностей 4 и 8 доступно [[RLE]]-кодирование, которое может уменьшить их размер. Формат BMP также поддерживает встраивание данных в форматах [[JPEG]] и [[PNG]]. Но последнее скорее больше предназначено не для компактного хранения, а для обхода ограничений архитектуры [[GDI]], которая не предусматривает прямую работу с изображениями отличных от BMP форматов. |
|
В последних версиях формата BMP также появились возможности по управлению цветом. В частности, можно указывать конечные точки, производить гамма-коррекцию и встраивать цветовые профили ICC. |
|
В последних версиях формата BMP также появились возможности по управлению цветом. В частности, можно указывать конечные точки, производить гамма-коррекцию и встраивать цветовые профили ICC. |
|
|
|
|
|
|
|
|
|
|
|
Формат DDB ({{lang-en|Device Dependent Bitmap}}, аппаратно-зависимый растр) всегда содержит цветовые коды, совпадающие с кодами [[Кадровый буфер|видеобуфера]], но храниться он может как в системной, так и в видеопамяти. |
|
Формат DDB ({{lang-en|Device Dependent Bitmap}}, аппаратно-зависимый растр) всегда содержит цветовые коды, совпадающие с кодами [[Кадровый буфер|видеобуфера]], но храниться он может как в системной, так и в видеопамяти. |
|
В обоих случаях он содержит только коды цвета в том формате, который обеспечит пересылку изображения из [[ОЗУ]] в видеопамять при помощи простого копирования<ref>Евченко А. И. OpenGL и DirectX. Программирование графики (Для профессионалов), 2006 г. С. 183.</ref>. |
|
В обоих случаях он содержит только коды цвета в том формате, который обеспечит пересылку изображения из [[ОЗУ]] в видеопамять при помощи простого копирования<ref>Евченко А. И. OpenGL и DirectX. Программирование графики (Для профессионалов), 2006 г. С. 183.</ref>. |
|
|
|
|
|
== Внутреннее строение == |
|
== Внутреннее строение == |
|
|
|
|
|
|
|
{| class="standard" style="text-align:left" |
|
{| class="standard" style="text-align:left" |
|
! style="text-align: center" | Версия</small> |
|
! style="text-align: center" | Версия |
|
! style="text-align: center" | Размер<br> <small>(байты)</small> |
|
! style="text-align: center" | Размер<br> <small>(байты)</small> |
|
! Имя структуры |
|
! Имя структуры |
|
|
|
! style="text-align: center" | Позиция<br>в структуре<br><small>(hex)</small> |
|
! style="text-align: center" | Позиция<br>в структуре<br><small>(hex)</small> |
|
! style="text-align: center" | Размер<br> <small>(байты)</small> |
|
! style="text-align: center" | Размер<br> <small>(байты)</small> |
|
! Имя</small> |
|
! Имя |
|
! Тип WinAPI |
|
! Тип WinAPI |
|
! Описание |
|
! Описание |
|
|
|
| 0 |
|
| 0 |
|
| style="text-align: left" | [[#JPEG-PNG|во встроенном JPEG-файле]] |
|
| style="text-align: left" | [[#JPEG-PNG|во встроенном JPEG-файле]] |
|
| ?/−<ref name="height-sign-width-jpeg">В MSDN в самом начале раздела «Remarks» [http://msdn.microsoft.com/en-us/library/dd183381%28v=vs.85%29.aspx страницы структуры BITMAPV5HEADER] есть предложение ''«If bV5Height is negative, indicating a top-down DIB, bV5Compression must be either BI_RGB or BI_BITFIELDS.»'' (перевод: ''«Если bV5Height отрицательный, обозначая DIB вида сверху-вниз, то bV5Compression должен быть либо BI_RGB, либо BI_BITFIELDS»''). Здесь возможно не уточнили, что это касается только RLE-кодирования, так как в одном из примеров прорисовки JPEG-растра указывается именно отрицательная высота (ищите строку «bmi.bmiHeader.biHeight» в статье «[http://msdn.microsoft.com/en-us/library/windows/desktop/dd145131%28v=vs.85%29.aspx Testing a Printer for JPEG or PNG Support]» на MSDN).</ref> |
|
| ?/−<ref name="height-sign-width-jpeg">В MSDN в самом начале раздела «Remarks» [http://msdn.microsoft.com/en-us/library/dd183381%28v=vs.85%29.aspx страницы структуры BITMAPV5HEADER] есть предложение ''«If bV5Height is negative, indicating a top-down DIB, bV5Compression must be either BI_RGB or BI_BITFIELDS.»'' (перевод: ''«Если bV5Height отрицательный, обозначая DIB вида "сверху вниз", то bV5Compression должен быть либо BI_RGB, либо BI_BITFIELDS»''). Здесь возможно не уточнили, что это касается только RLE-кодирования, так как в одном из примеров прорисовки JPEG-растра указывается именно отрицательная высота (ищите строку «bmi.bmiHeader.biHeight» в статье «[http://msdn.microsoft.com/en-us/library/windows/desktop/dd145131%28v=vs.85%29.aspx Testing a Printer for JPEG or PNG Support]» на MSDN).</ref> |
|
| {{да|98/2000}} |
|
| {{да|98/2000}} |
|
| {{нет|(не подд.)}} |
|
| {{нет|(не подд.)}} |
|
|
|
В 32-битных изображениях из-за удобства используют 8-битные каналы и поэтому поддержка для них может показаться избыточной. |
|
В 32-битных изображениях из-за удобства используют 8-битные каналы и поэтому поддержка для них может показаться избыточной. |
|
В действительности здесь маска даёт возможность включить/отключить альфа-канал или установить удобный вам порядок следования компонент, а не только регулировать их разрешение. |
|
В действительности здесь маска даёт возможность включить/отключить альфа-канал или установить удобный вам порядок следования компонент, а не только регулировать их разрешение. |
|
При применении масок ячейка пикселя считывается целиком как соответствующее машинное слово в litte-endian. |
|
При применении масок ячейка пикселя считывается целиком как соответствующее машинное слово в little-endian. |
|
|
|
|
|
Наличие битовых масок зависит от версии информационных полей структуры BITMAPINFO и поля Compression в ней. |
|
Наличие битовых масок зависит от версии информационных полей структуры BITMAPINFO и поля Compression в ней. |
|
|
|
Инструкции RLE позволяют прерывать прорисовку горизонтали, всего изображения, а также перемещать курсор прорисовки на другую позицию. |
|
Инструкции RLE позволяют прерывать прорисовку горизонтали, всего изображения, а также перемещать курсор прорисовки на другую позицию. |
|
В результате некоторые пиксели могут оказаться не зарисованными. |
|
В результате некоторые пиксели могут оказаться не зарисованными. |
|
Формат не предусматривает цвета для незарисованных пикселей, в документации ничего про них не сказано, а системные функции просто не трогают незакрашенные пиксели.
|
|
Документация явно не предусматривает цвета для незарисованных пикселей, в результате чего трактовка может варьироваться: пропущенные пиксели либо остаются прозрачными, либо приобретают цвет с индексом 0. |
|
Так как нет веской причины в начале закрашивать прямоугольник под растром неопределённым цветом, то можно говорить о том что RLE косвенно поддерживает прозрачность.
|
|
Если делать первое допущение, то можно говорить о том, что 4- и 8-битные режимы благодаря RLE косвенно поддерживают прозрачность, но такое поведение не гарантировано. |
|
|
|
|
|
Формирование изображения при RLE-кодировании осуществляется командами. |
|
Формирование изображения при RLE-кодировании осуществляется командами. |
|
|
|
Если интересует точный целочисленный перевод, то выходят следующие выражения: |
|
Если интересует точный целочисленный перевод, то выходят следующие выражения: |
|
|
|
|
|
: <code><i>PPM</i> = (<i>PPI</i> * 5000 + 64) / 127</code> |
|
: <code>''PPM'' = (''PPI'' * 5000 + 64) / 127</code> |
|
|
|
|
|
: <code><i>PPI</i> = (<i>PPM</i> * 127 + 2500) / 5000</code> |
|
: <code>''PPI'' = (''PPM'' * 127 + 2500) / 5000</code> |
|
|
|
|
|
После них округление будет произведено к ближайшему целому. |
|
После них округление будет произведено к ближайшему целому. |