Компьютерные Технологии в Обучении

Курс лекций по компьютерной геометрии и графике

256 >>  Графика
 

Тема № 2 Форматы графических файлов

стр. 1    стр. 2    стр. 3    стр. 4    стр. 5    стр. 6    стр. 7

2.2 Описание формата PCX

Файлы изображений, которые используются в продуктах семейства PC Paintbrush и FRIEZE, были разработаны фирмой Zsoft. Расширение файла DOS - PCX, тип формата растровый. Открывать или импортировать файлы PCX могут почти все графические приложения для персональных компьютеров. Цветовые возможности 1, 2, 4, 8 или 24- битовый цвет, никаких оттенков серого. Всегда применяется сжатие ROB. У этого формата есть ряд недостатков: 1) не поддерживает изображения с оттенками серого или таблицы коррекции шкалы серого; 2) не поддерживает цвета CMYK или другие системы отличные от RGB; 3) многочисленные варианты, особенно при работе с цветами, могут делать работу с файлом невозможным; 4) неудобная схема сжатия в действительности может увеличивать размеры некоторых файлов.
Среди положительных сторон формата РСХ можно назвать то, что он хорош для изображений, которые: 1)создают ограниченную палитру цветов (лучше всего 16 или 256); 2) не являются изображениями отсканированными или фотографиями, которые плохо сжимаются; 3)должны быть читаемыми всеми приложениями персонального компьютера.
Файлы изображения PCX начинается с заголовка длиной 128 байт. Затем идут закодированные графические данные. При кодировании используется простой алгоритм, основанный на методе длинных серий. Если в файле запоминается несколько цветовых слоев, каждая строка изображения запоминается по цветовым слоям. Согласно документации Zsoft, это выполняется по приведенной ниже схеме (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% неповторяющихся данных и, по меньшей мере, наличие смещения между повторяющимися данными, то размер получаемого файла, как правило, оказывается приемлемым.
Таблица 2. Формат заголовка 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 являются целыми.

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

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

Замечание

В конце каждой строки развертки предусматривается остановка алгоритма кодирова-ния, т.е. предполагается, что каждая строка развертки кодируется независимо. Но это не всегда так (файлы в этом формате пишет не только ZSoft Corporation !). Конец каждой строки лучше все-таки фиксировать по заполнении ее буфера. Это, безусловно, чуть усложнит программу декодирования, но сделает ее более гибкой.

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

Информация о 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. 256-цветная палитра форматируется и интерпретируется точно так же, как 16-цветная. Палитра (число цветов * 3 байта длины) добавляется в конец PCX файла и ей предшествует байт с десятичным значением 12. Для определения палитры VGA BIOS достаточно разделить прочитанные значения цветов на 4.
Для доступа к 256-цветной палитре следует:
1. Прочитать в заголовке поле Version. Если оно равно 5, палитра должна быть. Или прочитать в заголовке поле Bits per pixel. Если оно равно 8, 256-цветная палитра должна быть.
2. Прочитать конец файла и отсчитать назад 769 байт. Найденное вами значение должно равняться 12, что указывает на присутствие 256-цветной палитры.
В пакете программ PCX Programmer's Toolkit фирмы Genus Microprogramming принят другой способ хранения 256-цветной палитры. Отличие состоит в том, что палитре предшествует байт с десятичным значением 10 (вместо 12), а значения цветовых компонент занимают младшие 6 битов в каждом из байтов цветовой тройки (т.е. изменяются от 0 до 63, как это принято в VGA BIOS).

стр. 1    стр. 2    стр. 3    стр. 4    стр. 5    стр. 6    стр. 7

 
ВебПрограммированиеГрафикаAdobe PhotoshopЛекции по КГГ ==>Офисные программыПедагогикаПеременаНаши баннеры
Запуск Adobe Photoshop CS5 состоялся 12 апреля 2010 года. Компания Adobe Systems Incorporated официально объявила о выходе новой версии Creative Suite 5.
Мужество больше проявляется не в том, чтобы затеять драку, а в том, чтобы уметь избежать ее.
М. Андерсон
 
Город книг - аннотации книг по Photoshop, веб-дизайну, программированию для веб
Яндекс цитирования

© Олег Тыщенко, 2000-2017