Odyssey Magazine #02
14 июля 1997

Система - Описание формата PСX.

IBM:PCX
_______

Music by Shov




           ОПИСАНИЕ ФОРМАТА PCX
 
   Перевод  с английского языка и формати-
   рование выполнены сотрудником Института
   прикладной математики АН СССР А.Самото-
   хиным

От переводчика
──────────────
     Исходный документ был получен мною из
JVDialuge 1st BBS 10.09.1991, переведен на
русский  язык  и отформатирован. Некоторые
части  документа,  не относящиеся к техни-
ческой информации при переводе были опуще-
ны.  Там,  где я считал это необходимым, я
снабдил перевод своими комментариями.

ZSoft Corporation
450 Franklin Rd. Suite 100
Marietta, GA  30067
(404) 428-0008
Copyright 1988 ZSoft Corporation


                 Введение


    Цель  создания данного буклета состоит
в том, чтобы помочь пользователям и разра-
ботчикам  программ разобраться в техничес-
ких  аспектах формата .PCX и использования
утилиты FRIEZE. Все комментарии, вопросы и
предложения  по буклету направляйте по ад-
ресу:

ZSoft Corporation
Technical Support Department
ATTN: Technical Reference Manual
450 Franklin Rd. Suite 100
Marietta, GA  30067


     Формат файла изображений (.PCX)


    Информация  данного  раздела будет по-
лезна  для  вас,  если  вы хотите написать
программу  для  чтения или записи PCX фай-
лов. Если вы хотите написать программу для
изображений  строго определенного формата,
вы  должны  быть в состоянии создать нечто
такое,  что  будет работать вдвое быстрее,
чем  "Load from..." в PC Paintbrush. Файлы
изображений,  которые  используются в про-
дуктах семейства PC Paintbrush и FRIEZE (с
расширениями  .PCX) начинаются с заголовка
длиной  128 байт. Обычно вы можете игнори-
ровать этот заголовок, если все ваши изоб-
ражения будут иметь одинаковое разрешение.
Если же вы хотите обрабатывать изображения
с различным разрешением и разным количест-
вом  цветов, вам следует корректно интерп-
ретировать  информацию, находящуюся в дан-
ном  заголовке.  Оставшаяся  часть файла с
изображением   состоит  из  закодированных
графических  данных.  При  кодировании ис-
пользуется простой алгоритм, основанный на
методе  длинных серий. Мы оставляем за со-
бой  право  изменять этот алгоритм с целью
повышения  эффективности  упаковки данных.
Если в файле запоминается несколько цвето-
вых слоев, каждая строка изображения запо-
минается по цветовым слоям (в общем случае
красному-R,  зеленому-G,  синему-B  и слою
интенсивности-I) по схеме, приведенной ни-
же:

Строка изображения 0:
    RRR...
    GGG...
    BBB...
    III...
Строка изображения 1:
    RRR...
    GGG...
    BBB...
    III...
(и т.д.)

Замечание переводчика
─────────────────────
     Здесь в исходном документе имеет мес-
то  явная  некорректность.  Запоминание по
слоям   проводится,   как   правило,   для
16-цветных  изображений EGA. В этом случае
сначала  запоминается содержимое строки из
нулевого  слоя видео памяти, затем из пер-
вого  и  т.д.  Нетрудно заметить, что даже
при стандартной палитре EGA, которая уста-
навливается  по умолчанию BIOS'ом, нулевой
слой видео памяти содержит СИНЮЮ компонен-
ту  цвета,  а  не красную. Если же палитра
отлична от стандартной, то говорить о том,
что слои видео памяти соотносятся с компо-
нентами цвета вообще затруднительно.

Метод кодирования состоит в следующем:
ДЛЯ каждого байта X, прочитанного из файла
    ЕСЛИ оба старших бита X равны 1, то
        <повторитель> = 6 младшим битам X
        <данные> = следующему байту за X
    ИНАЧЕ
        <повторитель> = 1
        <данные> = X

    Поскольку  для насыщения данного алго-
ритма  требуется в среднем 25% неповторяю-
щихся  данных  и  по  меньшей мере наличие
смещения  между повторяющимися данными, то
размер получаемого файла, как правило ока-
зывается приемлемым. Формат заголовка фай-
ла приведен ниже.

Замечание переводчика
─────────────────────
     Под насыщением алгоритма авторы доку-
мента по всей видимости понимают ситуацию,
когда размер получаемого файла оказывается
больше,  чем  объем требуемой видео памяти
для представления записанного изображения.
Нужно  отметить,  что  с этой точки зрения
формат PCX, безусловно, не лучший. В част-
ности,  такое  насыщение  достаточно часто
имеет место для цветных реалистичных изоб-
ражений,  особенно,  если  при их создании
применялись методы полутонирования.

           Формат заголовка PCX


Смещен. Обозначение  Длина Комментарий
 0      Manufacturer   1   Постоянный флаг
                           10 = ZSoft .PCX
 1      Version        1   Информация о
                           версии:
                            0 = Версия 2.5
                            2 = Версия 2.8
                           с информацией о
                           палитре
                            3 = Версия 2.8
                            без информации
                            о палитре
                            5 = Версия 3.0
 2      Encoding       1   1 = .PCX  коди-
                            рование  длин-
                            ными   сериями
 3      Bits per pixel 1   Число  бит  на
                           пиксел в слое
 4      Window         8   Размеры изобра-
                           жения (Xmin,
                           Ymin) - (Xmax,
                           Ymax)в пикселах
                           включительно
12      HRes           2   Горизонтальное
                           разрешение соз-
                           дающего устрой-
                           ства
14      VRes           2   Вертикальное
                           разрешение соз-
                           дающего устрой-
                           ства
16      Colormap      48   Набор цветовой 
                           палитры (см. 
                           далее текст)
64      Reserved       1
65      NPlanes        1   Число цветовых 
                           слоев
66      Bytes per Line 2   Число байт на 
                           строку в цвето-
                           вом слое (для 
                           PCX-файлов все-
                           гда должно быть 
                           четным)
68      Palette Info   2   Как интерпрети-
                           ровать палитру:
                            1 = цветная/
                              черно-белая,
                            2 = градации 
                                  серого
70      Filler        58   Заполняется ну-
                           лями до конца
                           заголовка

Все переменные длины 2 являются целыми.

Замечание переводчика
─────────────────────
    Во  избежание  недоразумений:  в  поле
Window последовательно располагаются 4 це-
лых  числа,  которые соответствуют угловым
координатам  изображения Xmin, Ymin, Xmax,
Ymax. Как правило, Xmin и Ymin = 0.

    Декодирование файлов в формате PCX


   Сначала определите размер изображения, 
вычислив
      [XSIZE = Xmax - Xmin + 1] и
      [YSIZE = Ymax - Ymin + 1].
Затем  вычислите, сколько байтов требуется
для  сохранения одной несжатой строки раз-
вертки изображения: TotalBytes = NPlanes *
BytesPerLine
Отметим, что поскольку всегда используется
целое число байтов, возможно существование
неиспользуемых данных в конце каждой стро-
ки развертки. TotalBytes показывает сколь-
ко памяти должно быть доступно для декоди-
рования  каждой  строки развертки, включая
неиспользуемую  информацию на правом конце
каждой строки.

     Теперь вы можете начать декодирование
первой  строки развертки - прочитайте пер-
вый байт данных из файла. Если два старших
бита этого байта равны 1, оставшиеся шесть
битов  показывают сколько раз следует пов-
торить  СЛЕДУЮЩИЙ  байт из файла. Если это
не  так, то этот байт сам является данными
с повторителем равным 1. Продолжайте деко-
дирование  до  конца  строки, ведя подсчет
количества  байтов, переданных в буфер вы-
вода. В конце каждой строки развертки име-
ет  место остановка алгоритма кодирования,
но ее не существует при переходе от одного
слоя  к другому. Когда строка сформирована
полностью,  в  конце  каждого  слоя внутри
строки возможно наличие лишних данных. Для
нахождения  этого остатка используйте зна-
чения  XSIZE и YSIZE. Если данные являются
многослойными, то BytesPerLine показывает,
где заканчивается каждый слой внутри стро-
ки развертки.

      Продолжайте декодирование оставшихся
строк.  В  файле  возможно  наличие лишних
строк с округлением на 8 или 16 строк.

Замечание переводчика
─────────────────────
     Как следует из приведенного описания,
в конце каждой строки развертки предусмат-
ривается  остановка алгоритма кодирования,
т.е предполагается, что каждая строка раз-
вертки  кодируется  независимо. Однако мое
знакомство с файлами в формате PCX показы-
вает,  что это не всегда так (файлы в этом
формате  пишет  не только ZSoft Corpration
!).  Поэтому  я бы советовал пользователям
не рассчитывать на то, что такая остановка
обязательно  будет иметь место. Конец каж-
дой  строки  лучше все-таки фиксировать по
заполнении  ее  буфера.  Это,  безусловно,
чуть  усложнит программу декодирования, но
сделает  ее  более гибкой. (Кстати говоря,
графический  редактор  PC Paintbrush прек-
расно  понимает  PCX файлы, записанные без
остановки  алгоритма  кодирования  в конце
каждой  строки,  хотя при порождении собс-
твенных файлов такую остановку делает).

      Описание информации о палитре


Информация о 16-цветной палитре (EGA/VGA)

    Информация  о  палитре  запоминается в
одном  из двух различных форматов. В стан-
дартном  формате  RGB  (IBM  EGA, IBM VGA)
данные  запоминаются  в 16 тройках. Каждая
тройка  состоит  из 3 байтов со значениями
красного  (Red), зеленого (Green) и синего
(Blue) цветов. Значения могут находиться в
диапазоне  0-255,  и поэтому необходима их
интерпретация  в формат используемого обо-
рудования. Например, на IBM EGA существуют
4  возможных уровня RGB для каждого цвета.
Поскольку  256/4  =  64,  то ниже приведен
список  соответствия  цветовых  значений и
уровней:

Значение Уровень
  0-63      0
 64-127     1
128-192     2
193-254     3

Информация о 256-цветной палитре VGA

    В  настоящее  время ZSoft добавил воз-
можность  хранения в файле изображения PCX
палитры,  превышающей 16 цветов. 256-цвет-
ная  палитра форматируется и интерпретиру-
ется  точно также, как 16-цветная, естест-
венно,  за исключением того, что она длин-
нее.  Палитра (число цветов x 3 байта дли-
ны)  добавляется  в  конец  PCX файла и ей
предшествует  байт  с десятичным значением
12.  Для  определения палитры VGA BIOS вам
достаточно  разделить прочитанные значения
цветов на 4.

Для доступа к 256-цветной палитре следует:
1. Прочитать в заголовке поле Version. Ес-
ли оно равно 5, палитра должна быть.
2. Прочитать конец файла и отсчитать назад
769  байт.  Найденное вами значение должно
равняться 12, что указывает на присутствие
256-цветной палитры.

Замечание переводчика
─────────────────────
     Два  замечания  по поводу 256-цветной
палитры.  Во-первых,  между пунктами 1 и 2
приведенной инструкции я добавил бы следу-
ющий: "Прочитать в заголовке поле Bits per
pixel.  Если  оно равно 8, 256-цветная па-
литра   должна   быть.".  Смысл  очевиден.
Во-вторых,  в настоящее время довольно ши-
рокое  распространение получил пакет прог-
рамм .PCX Programmer's Toolkit фирмы Genus
Microprogramming.  В этом пакете (по край-
ней  мере  в известных мне версиях) принят
способ  хранения  256-цветной палитры нес-
колько  отличный  от  того, что был описан
выше.  Отличие  состоит в том, что палитре
предшествует  байт  с десятичным значением
10 (вместо 12), а значения цветовых компо-
нент  занимают младшие 6 битов в каждом из
байтов цветовой тройки (т.е. изменяются от
0 до 63, как это принято в VGA BIOS).

    Информация о цветовой палитре CGA


    Для  стандартной платы IBM CGA битовый
набор  для  определения палитры более сло-
жен. Используется только первый байт трой-
ки.  Первая  тройка содержит только первый
байт  с осмысленным значением, который оп-
ределяет  цвет фона. Чтобы определить цвет
фона,  нужно значение этого байта (беззна-
ковое) разделить на 16. В результате будет
получено  значение в диапазоне 0-15, кото-
рое  и определяет цвет фона. Вторая тройка
содержит осмысленное значение первого бай-
та,  которое  определяет  значение палитры
для  трех оставшихся цветов. PC Paintbrush
поддерживает  для  этих цветов 8 возможных
палитр  CGA,  и,  поскольку значение байта
может быть от 0 до 255, его следует разде-
лить на 32 (см. схему, приведенную ниже).

Taблица цветов для CGA
Байт #16 в заголовке
 Цвет фона определяется 4 старшими битами.
Байт #19 в заголовке
 Используются  только  3 старших бита, ос-
тальные  5  игнорируются.  Первые три бита
обозначаются  как  C, P, I. 
   Их интерпретация:
  C: разрешение color burst - 0 = color; 1
  =  monochrome
  P: палитра - 0 = желтая; 1 = белая
  I: яркость - 0 = малая; 1 = повышенная.

Замечание переводчика
─────────────────────
    Как  видите, исходный документ умалчи-
вает  о  том, в каких случаях информацию в
заголовке файла следует трактовать как па-
литру  CGA.  Не  исключено,  что ветвление
следует вести по полю Version заголовка.

__________________________________________



Другие статьи номера:

Вступление - Что будет в третьем номере ?

Вступление - об оболочке

Ассемблер - Возможно ли перекинуть экран (6144 байта) за один тик.

Ассемблер - Плавный скрол текста вверх в окне 15x24 знакоместа.

Дискуссия - AMIGA VS PC мнение читателей (VVG).

Презентация - VIRTUAL VISION GROUP из Воронежа .

Отдохнем - Рок энциклопедия: MEGADEATH...

IS-DOS - Проблемы и решения: макросы.

IS-DOS - Практическое применение макросов.

Почта - Скроллинг по строке вверх и вниз.

Почта - Печать строки 32-х символьным шрифтом.

Почта - Процедура пропорциональной печати.

Отдохнем - Рассказ "Чебурашка".

Система - Описание формата PСX.

Система - Описание программ: Y-COMMANDER & MS COMPILER v1.08.

Обзор - Системных программ: XAS 7.1

Обзор - Системных программ: PRO TRACKER 2,1, PRO TRACKER 3,0d

Обзор - Системных программ: ZASM

Разборка - Обзор игр на тему "футболный менеджмент" : Обзор на тему "футболный менеджмент" : THE DOUBLE , MSMANAGER, MANCHESTER UNITED, KENNY, SOCCER RIVALS , 1-ST DIVISION MANA- GER, SUPER LEAGUE, SOCCER BOSS, PROFFESIONAL SOCCER FOOTBALL, MANAGER 2, ADVANCED SOCCER SIMULATOR.

Интервью - Интервью с FIKUS/Flash Inc.

Отдохнем - Однажды на лекции.

История - Хакеры - статья "ОНО" - об истории появления хакерства. ч.2

Система - Перспективы группы Assept Corp: APS v2.0.

Система - Multicolor Studio Compiler

Разборка - Описание игр: SOCCER RIVALS.

Реклама - Реклама и объявления.

Новости - Колесо обозрения.

Почта - о письмах

Почта - Конкурс на лучшую головолмку (первые 2 головоломки).

Обзор - Новые игры: TIME COP, UFO III, MORTAL COMBAT, MINELAYER , SEX REVERSY, THE MAGIC OF LOGIC, FEUDAL WARS, КУБОК АВИЛЛИАДЫ , CHOPPER DUEL, BACK TO SCHOLL, LCP, 750 CC GRANDPRX, INTERNA- TIONAL KIKBOXING, TAG TEAM WRESTLING, CAPTAIN PLANET,DOC THE DESTRUE DUX, OLE,TORO!.

Презентация - История группы AURYN.

Подарок - О приложении к журналу.

Деморынок - Хит парад музыкальных дем.

Система - Описание программ: КРАТКОЕ ОПИСАНИЕ КОМАНД Y-COMMANDER.

авторы - авторы журнала


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Новые программы - копировщик ABCDcopy и утилита для форматирования гибких дисков Floppy Format.
Necronomicon - Вопрос: Что такое "Некрономикон"? "Книга Мертвых Имен"
Рассказ - Сергей Есенин "Летние каникулы" (продолжение).

В этот день...   19 сентября