Кодирование цвета. Среднее количество цветов.
Видеорежимы с указанием цвета непосредственно в коде точки (direct color) были введены в версии стандарта VBE 1.2, опубликованной в октябре 1991 года. К этому времени цветные сканеры уже преодолели барьер в 256 цветов, и возникла необходимость стандартизации способов работы с цветом. Кроме того, за время, прошедшее после публикации первых версий стандарта VBE, элементная база существенно улучшилась и позволяла выпускать видеокарты с нужными техническими характеристиками.
При работе в полноцветных видеорежимах регистры цвета видеокарты не используются, код точки поступает из видеопамяти непосредственно на входы преобразователей код-аналог, выходы которых подключены к монитору. Это исключает необходимость манипуляций с системной палитрой, в которой при работе в режимах PPG хранилась копия содержимого регистров цвета видеокарты. И при построении новых рисунков можно не беспокоиться о том, что использованные в них цвета испортят ранее созданное изображение.
Данная глава посвящена особенностям программирования для режимов direct color. В ней описаны способы кодирования цвета, пересчет координат точек в адреса видеопамяти, манипуляции с точками и построение рисунков. В последнем случае особое внимание уделено преобразованиям кодов точек образа рисунка в формат, соответствующий видеорежиму. Дополнительно приведен краткий обзор способов сжатия полноцветных рисунков и примеры манипуляций с цветом.
Манипуляции с графическими объектами во многих случаях зависят не только от размера кода точки, но и от того, как расположены базовые цвета в этом коде. Поэтому мы начнем с описания способов кодирования цвета.
Размер кода точки и расположение в нем базовых цветов зависят от видеорежима. Стандарт VESA предусматривает возможность определения указанных величин при выполнении задачи. В Главе 2 мы договорились, что характеристики установленного видеорежима находятся в массиве info, а их перечень приведен в Табл. 1.2. В массиве info количество разрядов в коде точки хранится в байте 19h, а расположение базовых цветов для режимов direct color – в байтах iFh-26h. Корректно составленная задача должна использовать эти величины для настройки на конкретный видеорежим.
Среднее количество цветов
Режимы среднего цветового разрешения в англоязычной литературе принято называть Hi-Color. При их установке возможны два способа кодирования цвета, различающиеся размерами кода точки. Например, в режиме иоь код точки занимает 15 разрядов, в которых можно указать 32 768 (или 32К) различных комбинаций (цветов), а в режиме nih код точки занимает 16 разрядов, в которых можно указать 65 536 (или 64К) разных комбинаций. Разрешение в обоих режимах одинаковое (640x480 точек), различается только расположение базовых цветов.
Кодирование цвета
В режимах m-coior код точки занимает одно слово, расположение базовых цветов в его разрядах показано в табл. 7.1.
Таблица 7.1. Размещение базовых цветов в слове.
Режим 32К цветов | |||||||||||||||
Красный цвет | Зеленый цвет | Синий цвет | |||||||||||||
F | E | D | C | B | A | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Режим 64К цветов | |||||||||||||||
Красный цвет | Зеленый цвет | Синий цвет | |||||||||||||
F | E | D | C | B | A | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
В режимах 32К коды базовых цветов занимают по 5 разрядов, старший разряд слова не используется. В режимах 64К код зеленого цвета занимает 6 разрядов, поэтому используются все разряды слова. Например, коды базовых цветов максимальной интенсивности имеют следующие значения:
Режим 32К: красный – 7COOh, зеленый – ЗЕОН, синий – IFh. Режим 64К: красный – OFSOOh, зеленый – 7EOh, синий – IFh.
Замечание
Трудно сказать, зачем разработчикам стандарта VESA понадобилось вводить экзотический режим 64К, вероятно для этого были какие-то особые причины. Палитру цветов он существенно не расширяет, но зато доставляет дополнительные хлопоты программистам.
Для того чтобы задача могла поддерживать обе разновидности режимов Hi-color, при работе с кодом цвета надо учитывать содержимое байтов 19h (размер кода точки) и iF – 26h (расположение базовых цветов) массива info.
Сравнение с режимом PPG. В видеорежимах PPG системная палитра позволяла использовать одновременно только 256 разных цветов, а в режимах Hi-color ее размер увеличился в 128 или в 256 раз. Сравнение явно не в пользу режимов PPG, но давайте вспомним и еще один факт. В режимах PPG код базового цвета занимал 6 разрядов, поэтому точка могла иметь один из 256К различных оттенков, а в режимах Hi-color – в 4 или в 8 раз меньше!
Таким образом, в режимах Hi-Color, по сравнению с режимом PPG, уменьшается цветовое разрешение, но увеличивается разнообразие цветов, которые можно одновременно увидеть на экране. Последнее обстоятельство является решающим доводом в пользу режимов Hi-color, но говорить при этом об улучшении качества передачи цвета никак нельзя.