Формат PCX ( расширение PCX)

Настоящий формат хранения растровых изображений на РС был разработан фирмой Zsoft для программы PaintBrush.

Файл программы РСХ состоит из заголовка. Все версии файлов РСХ имеют заголовок одинаковой структуры длинной 128 байт. Структура заголовка приведена в таблице 10.


Таблица 10. Структура заголовка РСХ.

Смещение Длина в байтах Примечание
     
    Байт идентификации: 0АН=файл РСХ
    Версия файла - 2,5 2 = версия 2,8 с описанием палитры 3 = версия 2,8 без описания палитры 5 = версия 3,0
    Ключ кодирования (уплотнения данных) 0 = без кодирования 1 = уплотнение RLE методом
    Количество битов на пиксель (количество битовых плоскостей)
    Координаты углов рисунка XMIN, YMIN, XMAX, YMAX (рис. 27)
    Разрешение по горизонтали dpi (dots per inch) - число точек на дюйм
    Разрешение по вертикали dpi (dots per inch) - число точек на дюйм
    Описание палитры в поле (16х3)м байтов
    Зарезервировано
    Число битовых плоскостей (не более 4)
    Число байтов на строку изображения (четное число)
    Параметры палитры 1 = ч/б 2 = уровни серого
    Пустые (для выравнивания заголовка до 128 байт)

Следует отметить, что данные заголовка читаются справа налево. Вначале (слева) находятся низшие разряды числа, а справа - старшие. Например число FF31 записано так 31FF.

Формат РСХ рассчитан для хранения прямоугольного участка изображения, состоящего из N строк по X пикселей в строке. Запоминание изображения осуществляется построчно, причем число битов (Х) четно и должно быть кратным 16-ти. Если оригинальный рисунок имеет другие размеры, то в конце строки добавляется несколько точек. Число строк в рисунке должно быть кратным 8-и. Для этого в нижней части рисунка (рис. 27) иногда вводятся дополнительные строки.

(рис. 27)

Следующие за заголовком графические данные располагаются в следующем порядке.

Каждый рисунок считывается построчно и разделяется на битовые плоскости. (рис 28). Плоскость 0 - соответствует синему цвету, 1 - зеленому, 2 - красному, 3 - интенсивности.

(рис. 28)

Вначале обрабатывается плоскость красного цвета. биты начальной строки объединяются в пары байтов. Незагруженные биты в последней паре байтов дополняются нулями.

После этого точно также обрабатывается плоскость зеленого цвета этой же строки. Потом синего и интенсивности. Выполняется переход на вторую строку и цикл обработки повторяется до окончания числа строк.

В файлах РСХ используется два метода укладки графических данных в файл: без уплотнения и с уплотнением. Если данные хранятся без уплотнения, то в байт со смещением 02 заголовка заносится число отличное от единицы, например 0.

Уплотнение (кодировка) данных в файле РСХ осуществляется так.

1. Если оба старших бита (6,7) байта заполнены 1, то последующая информация находится в уплотненной форме. В этом случае биты 0-5 указывают необходимое количество повторов цепочки битов, записанных в следующий байт.

2. Если хотя бы в одном из старших битов (6,7) содержится нуль, то данный байт следует трактовать именно как байт данных. В этом случае все биты 0-7 обрабатываются непосредственно как данные изображения, т.е. при загрузке неуплотненных данных два старших бита представляют точки изображения.

Например, пусть пара байтов имеет вид С2FA, что в двоичном исчислении имеет вид: 1100001011111010.

Поскольку в первом байте биты 6 и 7 единичные, а в битах 0-5 записано десятичное число 2, то цепочка битов второго байта повторится дважды: 1111101011111010.

Если же, например, байт имеет вид 1А, что в битовом представлении соответствует 00011010, то эта цепочка битов является частью строки изображения.

Для исключения неопределенности в случае, когда байт данных содержит единицы в 6 и 7 битах, а в четырех младших битах располагается 1. Тогда этот байт имеет вид: С1. Следующий байт трактуется уже как байт данных, повторяющихся 1 раз.

Например: С1С9.

Ниже приводится фрагмент программы языка Си, реализующий чтение байтов файла формата РСХ.

While (!feof (pcx))

{ch = fgete (pcx);

if (ch&oxco) = = oxco)

{a =ch&ox3f;

ch1 = fgete (pcx);

for (j=1; j£a; j++)

{vyvpixels (ch1, &x, &y, xmax);}

}

else

vyvpixels (ch1, &x, &y, xmax);}

Функция vyvpixels осуществляет вывод на экран пикселов байта данных. Цикл for осуществляет их вывод а раз. Отметим, что данная программа справедлива лишь для версии формата РСХ 2,5. Дамп файла РСХ представлен на рисунке 29.

В том случае, когда сканированное изображение хранится в другой версии файла РСХ необходимо выполнить перевод из этой версии в версия 2.5 чтобы использовать приведенную программу. Начиная с версии 2.8 при программировании операций чтения файлов формата РСХ необходимо учитывать данные о палитре цветов, которые располагаются со смещением 68 от начала заголовка.

Поскольку приведенная в примере программа выполняет чтение файлов формата РСХ версии 2.5, то есть 0, то необходимо преобразование всех других версий в эту. Например, сканер НР Scanjet упаковывает информацию в версии файла РСХ 3.0, т.е. 5. В качестве примера перевода этой версии в нулевую можно воспользоваться программой Paint Shop Pro. Для этого вначале активируется меню WINDOWS. В режиме “программы ” выбирается режим “Стандартные”. Далее в подрежиме “служебные” выбирается программа Paint Shop Pro. В режиме FILE основного меню открывается интересуемый нас графический файл формата РСХ. Далее в подрежиме Save As осуществляется его упаковка в нужной версии. Для этого в окне List Files of Type выбирается файл РСХ – Zsoft Paintbrush. В окне Select Subtype выбирается версия из трех возможных: 0, 2, 5. В нашем случае выбирается 0. Выбирается или вводится новое имя файла. После нажатия мышью электронной кнопки ОК произойдет упаковка файла. Его спецификация будет:

С:\\ppf\\имя.рсх


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: