Форматы PCX и BMP.

Первым был разработан формат PCX и предназначался для Paintbrush. Этот формат хранит точечные изображения в самом примитивном виде, однако он является самым малоконфликтным. Он используется во многих серьёзных программных продуктах, например, в большинстве издательских систем. Также есть в простых графических пакетах.

Формат BMP очень похож на PCX и имеет ту же идеологию и запись с разложением на битовые плоскости. В настоящий момент хранение изображений в формате BMP есть во всех графических пакетах. Растровые изображения разбиваются на строки и столбцы, и дальнейшее хранение выполняется построчно.

В этом формате можно хранить цветные и монохромные изображения. С тем, сколько разрядов и сколько цветов в картинке, проявляется разница в версиях формата.

Для обоих форматов:

0 – синий цвет

1 – зелёный цвет

2 – красный цвет

3 – интенсивность

Этот порядок нестандартный. Последовательно записаны биты плоскостей 0, 1, 2, 3.

Уплотнение.

1. В первых версиях всё сводилось к стандартной палитре в 256 цветов. Начиная с версий 3 – 4 палитру можно передавать вместе с файлом.

Заголовок.

Имеет длину 128 байт.

Запись 1. Это идентификатор типа файла.

0A – PCX

BM – BMP

Запись 2. Версия формата. Версия 2.х – с передачей палитры, 3.х – без передачи палитры.

Запись 3. Уплотнение. Применяется RLE –метод сжатия.

Запись 4. Количество бит на пиксел.

Запись 5. Окно изображения.

Хmin

Ymin

Xmax

Ymax

Также смотри примечание.

Запись 6. Разрешение по горизонтали и вертикали (dpi).

Далее может следовать описание палитры (16×3 байт). Затем идёт число битовых плоскостей. Максимум 4, минимум 1.

Затем кодируется монохромное или цветное изображение по записанному числу: 1 – монохромное, 2 – градации серого. Другие уровни записи не допускаются. Далее следует резервная часть, которая до конца заполнена нулями.

ПРИМЕЧАНИЕ. Число строк должно быть кратно 8, а число точек в строке кратно 16. Если размер изображения не кратен, то выполняется дополнение до ближайшего кратного. При больших размерах изображения эти дополнения не влияют на размер файла. Добавленные участки заполняются нулями по всем битовым плоскостям. Уплотнение данных проводят по каждой плоскости отдельно по способу RLE. Особенность в том, что код уплотнён или неуплотнён – это 6-ой и 7-ой разряды.

11 – уплотнено

00 – неуплотнено

В ряде случаев из-за применения такого способа сжатия возможен обратный эффект – размер файла может оказаться больше. Уплотнение фактически никогда не происходит, чтобы его выполнить, надо при сохранении файла отметить специальный флажок. Так же способ задания палитры зависит от конкретного типа графического адаптера (CGA, EGA, VGA).

Начиналось всё с CGA. Работает с 16 цветами. Соответственно полезная информация не может занимать полный байт. Записи разбиты на тройки. Для CGA в первом слове из трёх информацию несут 4 старших бита, это цвет фона. Все остальные игнорируются. Во втором слове информацию несут три разряда.

7-ой разряд: 0 – монохромное, 1 – цветное.

5-ый разряд: 0 – тёмный, 1 – светлый.

6-ой разряд. Цвета для смешивания:

0 – зелёный, красный, жёлтый.

1 – синий, белый, оттенок красного.

Таким образом можно получить 8 вариантов палитры на одном из 16 фонов.

Стандартные адаптеры EGA/VGA также используют 16 цветов, но их формируют совершенно по другому.

VGA – 16 цветов. Базовые цвета – красный, синий, зелёный. Используются все три байта записи. Количество уровней каждого цвета должно быть 4, чтобы формировать 16 цветов.

EGA. Значение каждого байта должно делиться на 4. Может принимать значения 0, 1, 2, 3. Два бита дадут 4 уровня яркости.

VGA (256 цветов). Образуют палитру по аналогии с EGA путём деления значения байта, только делится он на 4. Таким образом, формируется доля базового цвета, и получают стандартную палитру в 256 цветов. Если мы хотим работать с выбранными 256 цветами из 16777216 цветов, то в конце файла добавляется нестандартная палитра. С полным набором в 16777216 цветов формат PCX никогда не работает.

Если стоит монитор SVGA/XGA, то будут использоваться только 256 цветов. А выбор 256 цветов будет описываться в палитре, которая будет дописываться в конец файла.