четверг, 22 октября 2009 г.

В чём смысл поля bmPlanes в записи BITMAP?

Это перевод What is the purpose of the bmPlanes member of the BITMAP structure? Автор: Реймонд Чен.

Много записей, относящихся к bitmap-ам, в Windows имеют поле, называемое "planes". Например, запись BITMAPINFOHEADER имеет поле biPlanes (которое должно быть установлено в 1). Запись BITMAP имеет поле, называемое bmPlanes. Что за история с этим полем?

Видео адаптер EGA поддерживал отображение 16-ти цветов одновременно. Это было невероятное улучшение по сравнению с CGA, который поддерживал только четыре. Если вы имели 16-ть цветов, то вам нужно было четыре бита на пиксель. Вы можете подумать, что кодирование заключалось бы в том, что каждый байт видео памяти кодировал два пикселя, один - в младших четырёх битах, а второй - в старших четырёх. Но по техническим причинам, структура видео памяти не была такой простой.

Вместо укладывания бит для каждого пикселя один за другим, цветовые каналы были разделены каждый по своему одноцветному растру. Иными словами, пиксели разрезались "другим путём":
00001111|0F
00110011|33
01010101|55
01100110|66

03568BDE
Предположим, что вы хотите показать восемь пикселей с цветами (0, 3, 5, 6, 8 B, D, E). Вместо хранения элементов в этом порядке разрежьте каждый элемент по битам и соберите вместе все биты на одной позиции. Другими словами, читайте биты поперёк, а не вниз.

В умалчиваемой 16-ти цветной палитре цвета назначались так, что бит 0 был голубым каналом, бит 1 был зелёным каналом, бит 2 - красным, а 3 - интенсивностью. С этой интерпретацией четыре среза могут быть интерпретированы как "плоскость интенсивности", "красная плоскость", "зелёная плоскость" и "синяя плоскость". Для последних трёх плоскостей вы можете представить, что каждая из них показывает, что вы увидите, если соответствующая электронная пушка выстрелит.

Поскольку это был естественный цветовой формат для EGA, то нужен был способ, чтобы выразить этот цветовой формат в записи BITMAP, так что устройство-зависимые (device-dependent) растры могли быть представлены Windows.

И вот так был рождён цветовой формат с плоскостями. Для 16-ти цветных плоскостных растров (planar bitmaps) число плоскостей будет четыре, а число битов на пиксель - один.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.