П А Л И Т Р Ы ************* Информация палитры хранится в одном из четырех форматов. Для режимов CGA, используется только первый и четвертый байт палитры заголовка. Первый байт обозначает цвет заднего фона - разделив его на 16 получим величину от 0 до 15. Четвертый байт обозначает цвет переднего фона. Число палитр CGA равно 8, поэтому разделим на 32 чтобы получить величину в пределах от 0 до 7. Для режимов EGA, данные хранятся в 16 "тройках". Тройка - это 3-байтовый набор величин красного, зеленого и голубого цветов. Так как каждая величина может находиться в диапазоне от 0 до 255, Вы должны отобразить эти величины в одном из четырех возможных уровней для каждого цвета. Следовательно, 256 разделить на 4 будет 64, поэтому с 0 до 63 = уровень 0, с 64 до 127 = уровень 1, и так далее. Система BIOS адаптера EGA ожидает один байт формата 00RGBrgb для кажого регистра палитры. Четыремя возможными величинами для Bb являются 00, 01, 10 и 11. Когда Вы определили уровень для каждого цвета, скомбинируйте их в байте, совместимом с BIOS (Базовой системой ввода-вывода). Для 16-цветных режимов VGA, палитра снова хранится в "тройках". Для преобразования в совместимый формат BIOS, сдвиньте каждый байт вправо на два бита. Это преобразование автоматически выполняется функцией pcxGetFilePalette или функцией pcxDecodePalette. И последний формат поддерживает 256-цветный режим VGA. Так как каждый цвет требует тройку RGB (R (red)- Красный, G (green) - зеленый, B (blue) - голубой), для хранения всей палитры VGA будет необходимо 768 байт. Формат PCX, однако, может поддерживать только 16 цветов как максимум, поэтому палитра не может храниться в заголовке изображения по своему обычному адресу. Формат 256-цветной палитры претерпел мало изменений с тех пор, когда были впервые созданы 256-цветные режимы. Заголовок PCX был изначально создан для хранения 16 цветов как максимум, и длина его составляет всего 128 байт. Для 256-цветной палитры требуется 768 байт (3 умножить на 256) - очевидно, что надо внести изменение. Первая попытка решить эту проблему, предпринятая компанией ZSoft, заключалась в том, чтобы хранить палитру в файле шаблонов Patterns, заключалась в том, чтобы хранить палитру в файле шаблонов Patterns, который используется для редактирования цветов и шаблонов в Paintbrush. Это решение, хотя оно и работало для Paintbrush, оказалось неудобным, так как для каждого 256-цветного изображение требовалось уже два файла. В мае 1988 года вышел Пакет программиста PCX, версия 3.0. В нем для хранения палитры использовался другой способ. Данные палитры добавлялись в конец файла изображения; им предшествовал идентификационный байт 10 (такой же идентификатор, что и заголовок PCX). Регистры палитры хранились в совместимом с BIOS формате RGB (один байт для красного, один - для зеленого и один для голубого цвета), используя младшие 6 битов в байте. В конце 1988 года, компания ZSoft приняла такой же способ и для хранения 256-цветной палитры. Однако, палитры хранятся различно, вследствие того, что они имеют формат "независимый от устройства". Другими словами, это значит, что что каждый регистр палитры сдвинут влево на 2 бита, так что используются старшие 6 бит в байте. Для определения нового формата палитры используется идентификатор 12, или 0CH. Это позволяет пакету скрыто обрабатывать различные форматы палитр, так что могут читаться оба формата, но версия 3.5 теперь осуществляет сохранение только в новом формате.Программа Paintbrush,однако, не будет читать 256-цветные изображения "старой" версии пакета. Для обновления "старого" изображения Вам следует использовать сервисную программу pcxFix. Для того, чтобы определить, содержит ли 256-цветное изображение палитру: - Заголовок должен обозначать номер версии 5 - что представля- ет версию 3.0 Paintbrush с палитрой. - Байт, предшествующей палитре, должен соответствовать байту производителя PCX - первому байту в заголовке, который дол- жен иметь величину 10. Если эти два условия выполнены, то палитра имеется.