# PCX: индексированное изображение и выравнивание строк

Источник: [OpenCiv3, ReadPcx.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/ConvertCiv3Media/ReadPcx.cs). Файл прочитан целиком 26.10.2026; описывается реализация инструмента, не спецификация всех PCX.

## Что делает декодер

Загрузчик рассчитан на один цветовой слой и 256 цветов. Геометрия вычисляется из левой/правой и верхней/нижней границ заголовка, с включением обеих крайних координат. Тройкам RGB отводятся последние 768 байтов файла; пиксели сохраняются как индексы, а не сразу переводятся в RGB.

Поле `BytesPerLine` читается со смещения `0x42`. Данные RLE начинаются с `0x80`: если два старших бита байта равны единице, младшие шесть задают длину повтора следующего байта; иначе байт является индексом пикселя.

При нечётной ширине строки могут содержать дополнительный байт выравнивания. Его нельзя трактовать как видимый пиксель: тогда все следующие строки сместятся.

## Границы применимости

В коде прямо сказано, что это не универсальный PCX-reader. Он не устанавливает правила прозрачности конкретного игрового изображения: это следующий этап преобразования.

## Наши контрольные случаи

Для собственного импортёра нужны изображения чётной и нечётной ширины, буквальный индекс с установленными старшими битами, короткий файл и повреждённая длина повтора. Ограничение размеров и проверка выхода за конец должны предшествовать выделению памяти. Проверка на реальных ресурсах Atlants ещё не выполнена.
