Рисунки, использующие палитру
Полноцветные и подготовленные с применением палитры рисунки имеют разное назначение. В режимах direct color графические задачи должны "уметь" работать с любыми рисунками, независимо от способа их подготовки.
Если рисунок подготовлен с использованием палитры, то коды его точек являются порядковыми номерами строк таблицы цветов (палитры), хранящейся в файле вместе с образом рисунка. При построении таких рисунков в режимах direct color требуется преобразование кода каждой точки в код ее цвета, который затем записывается в видеопамять.
Количество перечисленных в палитре цветов, как правило, меньше количества точек в рисунке и это различие тем больше, чем больше размеры рисунка. Поэтому имеет смысл преобразовать исходную палитру в форму, упрощающую перекодировку точек при построении рисунка. Это не только упростит действия, выполняемые в соответствующих подпрограммах, но и сделает их независящими от формата исходной палитры.
Употребляя выражение "формат", мы имеем в виду количество байтов в строке палитры, и порядок расположения кодов базовых цветов в этих байтах. Формат зависит от стандарта хранения графических данных, которому соответствует файл, содержащий образ рисунка.
В большинстве стандартов используется формат rgb, впервые он был применен в стандарте PCX. В формате rgb строка состоит из трех байтов, в которых хранятся коды красного (r), зеленого (g) и синего (b) базовых цветов, расположенные в указанной последовательности.
Единственный в своем роде, но широко распространенный стандарт BMP для Windows предусматривает хранение палитры в формате bgro. В этом случае строка палитры состоит из четырех байтов. В трех первых хранятся коды синего (b), зеленого (g) и красного (r) базовых цветов, расположенные в указанной последовательности, последний байт резервный, обычно он очищен.
В модифицированном стандарте BMP для OS/2 из строки палитры исключен резервный байт, а в трех оставшихся байтах базовые цвета расположены в формате bgr.
При преобразовании строки палитры в код цвета точки надо учитывать не только формат строки, но и расположение цветов в коде точки, которое зависит от используемого режима direct color. Поэтому данный раздел делится на три подраздела, в двух первых описаны подпрограммы, предназначенные для применения в режимах Hi-Color и True color, а в третьем обсуждаются способы построения рисунков в обоих режимах.