Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_курс_кэм_new.doc
Скачиваний:
14
Добавлен:
06.02.2016
Размер:
653.82 Кб
Скачать

2 Формат файла pcx

Формат PCX был разработан фирмой ZSoft для PC Paintbrush под MS-DOS. Формат по соглашению с фирмой M$ перешел в ее собственность вместе с программой и получил широкое распространение.

Файл PСХ может содержать одно изображение размером не более 65535х65535 пикселей. Количество цветов может быть 2,16,256,16777215. Тип изображения - растровое.

Файл PCX состоит из следующих частей:

- заголовок;

- изображение;

- палитра VGA.

2.1 Заголовок файла PCX

Рассмотрим структуру заголовка файла PCX: TPCXHeader = record ID: byte; {Идентификатор} Vers: byte; {Версия файла} Encode: byte; {Кодирования} BitPerPix: byte; {Количество бит на пиксел} Xstart: word; {Левая граница} Ystart: word; {Верхняя граница} Xend: word; {Правая граница} Yend: word; {Нижняя граница} HorRez: word; {Гор. разрешение} VerRez: word; {Вер. разрешение} EGAPal: array [1..48] of byte;{Палитра EGA} Res1: byte; {-} NumPl: byte; {Количество битовых плоскостей} BytePerLine: word; {Байт на строку развертки} PallType: word; {Тип палитры} HorScSize: word; {Размер экрана по горизонтали} VerScSize: word; {Размер экрана по вертикали} Res2: array[1..54] of byte; {-} end;

ID - идентификатор файла PCX. Значение всегда 0Ah. Если значение отлично от 0Ah, на этом можно заканчивать обработку изображения.

Vers - значение этого поля указывает на версию PCX. Каждая версия подразумевает определенные требования для программ чтения (таблица 1).

Таблица 1

Значение

    1. Версия формата

0

Версия 2.5 с фиксированной палитрой EGA

2

Версия 2.8 с модифицируемой палитрой EGA

3

Версия 2.8 без палитры

4

Версия PC Paintbrush для Windows

5

        1. Версия 3.0

Encode - указывает на схему кодирования. Согласно спецификации PCX, это поле может иметь два значения: 0 - данные не кодируются 1 - данные кодируются с использованием байт-ориентированной RLE-схемы. Следует отметить, что данные кодируются всегда, а значение этого поля большинством программ игнорируется.

BitPerPix - количество бит, отводимых на пиксель в одной цветовой плоскости. Значением поля может быть 1,2,4,8. Важно помнить, что данные строки развертки дополняются нулями до четного количества байт. Значение этого поля можно использовать для отделения данных от заполнителя.

Xstart,YStart,XEnd,YEnd - Описывают размеры изображения и его положение на экране. Большинство программ игнорирует возможность размещения изображения в произвольной части экрана.

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

Пример: Xstart=0,XEnd=100, а длинна строки 108 пикселей. В изображение могут быть включены лишние строки. В любом случае программа чтения файла должна отображать только ту часть изображения, которая находится в прямоугольнике, описанном (Xstart,YStart) и (XEnd,YEnd).

HorRez,VerRez - горизонтальное и вертикальное разрешение изображения. Для декодирования изображения эти поля не нужны и носят лишь информативный характер.

EGAPal - массив из 48 байт. Представляют собой палитру.

Res1 - поле не используется начиная с Версии 2. Раньше обозначало режим дисплея, на котором создавалось изображение.

NumPl - задает количество цветовых плоскостей изображения. Возможные значения: 1,3,4. Комментарии по использованию этого значения представлены в таблице 2.

Таблица 2

NumPl

BitPerPix

Максимальное число цветов

Видеорежим

1

1

2

Монохромный

1

2

4

CGA

3

1

8

EGA

4

1

16

EGA и VGA

1

8

256

Расширенный VGA

3

8

16777216

Расширенный VGA и XGA

BytePerLine - размер незакодированной строки развертки одной цветовой плоскости в байтах. Умножая это значение на значение поля NumPl, получаем общую длину строки развертки в байтах.

PallType - тип палитры. 1-цветная или монохромная палитра, 2-градации серого цвета. Это поле игнорируется практически всеми программами, использующими PCX.

HorScSize,VerScSize - содержат информацию о разрешении экрана, на котором было создано изображение.

Res2 - 54 байта должны содержать нули. Дополняют заголовок до 128 байт.

  1. ФОРМАТ ФАЙЛА TGA

Файл TGA начинается с заголовка, затем идет необязательное поле идентификации изображения, необязательная цветовая таблица, растровые данные. Но есть и формат TGA 2.0, который полностью повторяет оригинальный формат, дополняя его рядом новых элементов. Все они, кроме концовки, являются необязательными и включаются в файл по желанию разработчика изображения. Концовка необходима для того, чтобы отличить один формат от другого. Ниже приведены элементы:

- директория разработчика;

- область разработчика;

- область расширения;

- таблица цветовой коррекции;

- почтовая марка (уменьшенное изображение);

- таблица строк развертки;

- концовка.

3.1 Заголовок файла TGA

TTGAHeader = record IDLength: byte; {Размер поля ID-изображения} ColorMapType: byte; {Тип цветовой палитры} ImageType: byte; {Код типа изображения} CMapStart: word; {Начало палитры} CMapLength: word; {Длинна палитры} CMapDepth: byte; {Глубина элементов палитры} XOffset: word; {Смещение по горизонтали} YOffset: word; {Смещение по вертикале} Width: word; {Ширина} Height: word; {Высота} PixelDepth: byte; {Размер пикселя} ImageDesc: byte; {Дескриптор изображения} end;

IDLength - указывает размер поля идентификации изображения, которое идет сразу за заголовком. Eсли это поле имеет значение 0, то области идентификации изображения в файле нет.

ColorMapType - определяет наличие цветовой таблицы. Если это поле равно 1 - таблица есть, 0 -нет, если лежит в пределах от 2 до 255 - таблица есть, но формат ее понятен только программе, создавшей файл.

ImageType - тип изображения.

Таблица 3

Значение

Тип данных изображения

Цвет таблицы

Кодировка

0

В файле нет данных изображения

Нет

Нет

1

Изображение с таблицей

Есть

Нет

2

TrueColorImage

Нет

Нет

3

Монохромное

Нет

Нет

9

Изображение с таблицей

Есть

Есть

10

TrueColorImage

Нет

Есть

11

Монохромное

Нет

Есть

Файлы TGA кодируются алгоритмом RLE.

CMapStart - Смещение первого элемента в таблице цветов.

CMapLength - Количество элементов цветовой таблицы.

CMapDepth - Количество битов в элементе таблицы.

ImageDesc - Описание изображения. Несет в себе следующую информацию:

7-6 биты - резерв, всегда 0.

4-5 биты - определяют позицию начала изображения. Если оба бита равны 0, то изображение начинается в левом нижнем углу.

0-3 биты - количество битов атрибутов в пикселе (альфа-канал, оверлейные биты и биты прерывания).

  1. ФОРМАТ ФАЙЛА TIFF

TIFF - это новый формат для файлов, удобный своей открытостью. Любые новые характеристики изображений могут быть включены в TIFF-файл (то есть в файл изображений в стандарт TIFF) без изменения программ, работающих с форматом TIFF. Кроме того, в отличие от других форматов, TIFF поддерживает одновременно как несжатые изображения, так и сжатые большим количеством разных способов. TIFF быстро становится мировым стандартом. Многие известные компании сообщили о поддержке этого стандарта.

4.1 TAGовая архитектура

Tagged architecture - организация, при которой с каждым словом памяти связан аппаратно или программно-реализуемый TAG, указывающий тип хранимой информации и определяющий множество применимых операций и способ их выполнения.

TAG - часть элемента данных, определяющая их тип (поле записи, один или несколько разрядов слова).

4.2 Различия между TIFFом и другими форматами

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

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

TIFF Заголовок TIFF-файла

HEADER

pointer Указатель на первую директорию TAGов

кол- Пример TAGа

TAGов TAG TYPE Тип TAGa

Tag 1 SIZ Размер

Tag 2 LENGHT Длина

pointer DATA Данные или

Tag 3 OR указатель

pointer POINTER на них

LONG Содержимое (значение) TAG 2

TAG (не уложилось в 12 байт -

DATA размер TAGa)

BIT-MAP Само изображение

IMAGE

DATA

IMAGE

DATA

(continue)

4.3 Преимущества формата TIFF

- Практически неограниченное количество параметров изображения;

- возможность использования различных цветов, палитр, оттенков серого, приемов сжатия и прочих разнообразных возможностей;

- экономия памяти на диске - дисковое пространство занимают только поля, содержащие информацию;

- широкое распространение TIFFa как мирового стандарта.

4.4 Недостатки формата TIFF

- некоторая сложность в понимании и восприятии формата (в сравнении с фиксированным);

- нет ни одного стандартного TIFF-файла. Различные версии имеют некоторые отличия и поддерживают разные наборы полей;

Различные версии TIFFa все поддерживают некоторый стандартный набор полей, а дополнительными полями нужно пользоваться с некоторой долей осторожности. Недостатки преодолимы.

4.5 Заголовок файла TIFF

Заголовок - информация о всем TIFF-файле, как о едином целом.

BYTE ORDER Порядок следования файлов

VERSION Hомер версии TIFFa

POINTER Адрес первой директории TAGов

FIRST DIRECTORY

Порядок следования файлов: 49 49 INTEL-формат ASCII I;

4D 4D Motorola-формат ASCII M

INTEL : AB CD означает число CDAB;

Motorola: AB CD означает число ABCD.

4.6 Directory (оглавление)

Оглавление состоит из трех частей

A ENTRY COUNT Количество TAGов

A+2 TAG 0

A+14 TAG 1 TAG 1 вместо данных

содержит их адрес

A+2+12n TAG

A+14+12n OFFSET TO Адрес следующего оглавления или если

NEXT DIRECTORY его нет

(if any)

TAG DATA Данные, не уместившиеся

NOT FITTING в TAGе 1

IN TAG 1

ENTRY COUNT показывает, сколько TAGов находятся в оглавлении. Далее идут TAGи (параметры изображения). Все TAGи фиксированной длины (12 байт). Последнее поле - адрес следующего оглавления. Если эта последняя директория, то это поле должно быть заполнено нулями.

4.7 Tag entry

TAG - основная базовая единица формата TIFF. Образец TAGa представлен ниже. Каждый TAG имеет размер 12 байт и строго определенную структуру.

A TAG TYPE Тип TAGa

A+2 DATA TYPE Тип данных

A+4 LENGTH Длина данных

A+8 VALUE OR Данное или

POINTER адрес другого данного

Первые 2 байта описывают тип информации, связанной с данным TAGом. Например, значение 282 (11А) говорит о том, что этот TAG несет информацию о разрешении изображения по оси Х.

Следующие 2 байта показывают, какой тип данных используется в TAGе.

Очередные 4 байта содержат в себе длину информации TAGa, измеряемую в предыдущем поле единицах.

Последние 4 байта могут быть использованы в двух целях. Они могут быть адресом относительно начала файла, по которому находятся данные TAGa, а могут быть и самими данными. Если данные вмещаются в 4 байта, то они могут быть расположены в четвертом поле, в противном случае, эти байты представляют собой адрес данных. Чтобы определить какой из двух принципов применен, необходимо посмотреть длину данных в байтах (умножив длину поля на количество байтов в данном типе данных). Если результат больше 4 байт, это означает, что в TAGе адрес данных, иначе - сами данные.

4.8 Совместимости

TAG имеют интересную особенность. Они могут быть как общие (определенные стандартом TIFF), так и особенные (определенные некоторыми фирмами для своих целей). Общие TAGи поддерживаются всеми фирмами, а особенные лишь создателями и пользователями.

4.9 Список типов TAGов

TAGи в директории должны быть расположены в порядке возрастания их номеров. Это позволяет быстро находить нужный TAG или адрес данных TAGa.

OFF (H) Subfile type.

Тип данных - 3.

Во всех примерах имеет значение 1.

Встречается во всех примерах.

100 Image width.

Ширина изображения (в пикселах).

Тип данных - 3, длина данных - 1.

Данные всегда находятся в TAGе

Данные сдвинуты влево и последние 2

байта значимой информации не несут.

101(H) Image length.

Длина изображения (в пикселах).

Дале полностью аналогично 100 (H).

102(H) Bits per sample.

Количество бит на точку.

Тип данных - 3.

Например: черно-белое бинарное

изображение - 1 бит на точку,

16 цветов - 4 бита на точку и т.д.

103(H) Compression.

Тип сжатия (если изображение сжато).

Тип данных - 3.

1=несжатое изображение

2=сжатие CCITT/3 и т.д.

106(H) Photometric Interp

Фотометрическая интерпритация.

тип данных - 3, длина данных - 1.

0 - "1" в файле соответствует черному

цвету, 1 - "1" белое и т.д.

107(H) Thresholding.

Порог.

Информация об этом TAGе не имеется.

108(H) Cell width.

Ширина ячейки.

Информация об этом TAGуе не имеется.

109(H) Cell lenght.

Длина ячейки.

Информации об этом TAGе не имеется.

10A Fill order.

Порядок заполнения.

Имеет тип 3, длину 1.

1=заполнение MSB в LSB.

MSB - старший бит, LSB - младший бит.

Например: пусть имеем 3 бита на точку,

тогда есть два варианта заполнения байта

10D Document name.

Название документа.

10Е(H) Image description.

Описание изображения.

Тип данных - 2.

10F(H) Make.

Производство.

Тип даных - 2.

110(H) Model.

Модель.

Тип данных - 2.

111(H) Strip offset.

Адрес начала изображения.

Тип данных - 4.

Всегда содержит адрес начала непосредственно самого изображения.

112(H) Orientation.

Ориентация.

Тип данных - 3, длина данных - 1.

1=normal orientation.

Предположительно, позволяет поворачивать

изображение не изменяя самого изображения, а изменяет лишь данные,

связанные с этим TAGом.

118(H) Min sample value.

Минимальное значение точки.

Тип данных - 3, длина данных - 1.

Например, в черно-белом бинарном изображении принимает значение 0.

119(H) Max sample value.

Максимальное значение точки.

Аналогично 118(H).

11A(H) X Resolution.

Разрешение по оси Х.

Тип данных - 5, длина - 1.

Так как дробь требует минимально

8 байт, то дробь не умещается в TAGе.

Так что последние 4 байта всегда

содержат указатель на 8 байт информации.

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

11B(H) Y Resolution.

Разрешение по оси Y.

Аналогично 11А(H).

11C(H) Planar configuration.

Тип данных - 3, длина - 1.

1=planar config is normal.

11D(H) Page name.

Название страницы.

Тип данных - 2.

11E(H) X Position.

Координата Х.

Смещение изображения по оси Х относительно всей страницы

(предположительно левый верхний угол).

11F(H) Y Position.

Координата Y.

Аналогично 11Е(H).

120(H) Free offsets.

121(H) Free byte counts.

Аналогично 121(H).

122(H) Gray response unit.

Блок представления серого цвета.

123(H) Gray response curve.

Огибающая серого цвета.

Содержит указатель на шкалу серого.

124(H) Group 3 options.

Используется при сжатии.

125(H) Group 4 options.

Используется при сжатии.

128(H) Resolution unit.

Блок разрешения.

129(H) Page number.

Количество страниц.

12C(H) Color response unit.

Блок цветного представления.

12D(H) Color response curves.

Огибающая цвета.

4.10 Тип данных

Существуют 5 различных типов данных.

1 = byte 8-bit bytes байт из 8 бит

2 = ascii 8-bit ASCII codes символы в ASCII

коде (8 бит)

3 = short 116-bit (2 bytes) 16 бит (2 байта)

unsigned integer беззнаковое целое

4 = long 32-bit (4 bytes) 32 бита (4 байта)

unsigned integer беззнаковое целое

5 = rational два числа: первое - числитель,

второе - знаменатель дроби.

Например, тип данных TAGа "Разрешение" это дробь. Так, чтобы задать 300 точек на дюйм числитель нужно установить в 300, а знаменатель в 1.

Формат ASCII нуждается в некотором объяснении. Вся ASCII информация в TIFF-файлах заканчивается символом NULL (0). Вся информация после этого символа не воспринимается.

  1. ФОРМАТ ФАЛОВ GIF

'GIF' (tm) - это стандарт фирмы CompuServe для определения растровых цветных изображений. Этот формат позволяет высвечивать на различном оборудовании графические высококачественные изображения с большим разрешением и подразумевает механизм обмена и высвечивания изображений.

Данный формат изображений был разработан для поддержки настоящей и будущей технологии обработки изображений и будет в дальнейшем служить основой для будущих графических продуктов CompuServe.

5.1 Общий формат файла

- идентификатор GIF;

- дескриптор экрана;

- глобальная таблица цветов;

- дескриптор изображения;

- локальная таблица цветов - повторяется от 1 до n раз;

- растровые данные;

- терминатор GIF.

5.2 Идентификатор gif

Наличие в начале файла специальной "подписи" указывает, что последующие данные являются действительно потоком данных изображения в формате GIF. Эта "подпись" состоит из следующих шести символов:

G I F 8 7 a

Три последних символа '87a' могут рассматриваться как номер версии для данного конкретного определения GIF и будут использоваться в дальнейшем в качестве ссылки на документ с описанием GIF в зависимости от номера версии.

5.3 Дескриптор экрана

Дескриптор экрана описывает общие параметры для всех последующих изображений в формате GIF. Он определяет размеры пространства изображения или требуемого логического экрана, существование информации о таблице цветов и "глубине" экрана. Эта информация запоминается в виде серии 8-битовых байтов, как показано ниже.

Таблица 4

биты

7 6 5 4 3 2 1 0

Номер байта

Ширина экрана

1

Ширина растра в пикселах (сначала LSB)

2

Высота экрана

3

Высота растра в пикселах (сначала LSB)

4

М

Cr

0

Pixel

5 М=1, за дескриптором следует глобальная таблица цветов

cr +1 = число битов цветового разрешения

pixel+1 = число бит/пиксел в изображении

Background

6 фон = цветовой индекс фона экрана (цвет определяется из глобальной таблицы цветов или из таблицы по умолчанию)

0 0 0 0 0 0 0 0

7

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

Значение 'pixel' также определяет число цветов в изображении. Диапазон значений 'pixel' составляет от 0 до 7, что соответствует от 1 до 8 битам. Это транслируется в диапазон от 2 (черно-белые изображения) до 256 цветов. Бит 3 в байте 5 зарезервирован для будущих определений и должен быть нулевым.

5.4 Глобальная таблица цветов

Глобальная таблица цветов является необязательной и рекомендуется для изображений, где требуется точная передача цветов. На существование этой таблицы указывает поле 'M' в байте 5 дескриптора экрана. Цветовая таблица может быть также связана с каждым изображением в GIF-файле.

Флаг 'M' в дескрипторе конкретного изображения обычно равен 0. Если глобальная таблица цветов присутствует, ее определение следует непосредственно за дескриптором экрана. Число элементов цветовой таблицы, следующей за описателем экрана равно 2**(число бит/пиксел), причем каждый элемент состоит из трех байтов, значения которых описывают соответственно относительную интенсивность красного, зеленого и синего цветов.

Структура блока цветовой таблицы представлена в таблице 5.

Таблица 5

Биты

7 6 5 4 3 2 1 0

Байт

Комментарии

Интен. красного

1

Значение красного для цвета 0

Интен. зеленого

2

Значение зеленого для цвета 0

Интен. синего

3

Значение синего для цвета 0

Интен. красного

4

Значение красного для цвета 1

Интен. зеленого

5

Значение зеленого для цвета 1

Интен. синего

6

Значение синего для цвета 1

: :

(Продолжение для остальных цветов)

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

Цветовые компоненты представляют собой значение относительной интенсивности от нулевой (0) до полной (255).

Белый цвет может быть представлен как (255,255,255), черный как (0,0,0) и желтый как (180,180,0).

При высвечивании на дисплеях, которые поддерживают менее 8 бит на цветовую компоненту, используются старшие биты. При создании элементов цветовой таблицы GIF на аппаратуре, поддерживающей менее 8 бит на компоненту, значение аппаратной компоненты должно быть конвертировано в 8-битный формат по следующей формуле:

<значение_в_таблице> = <компонента>*255/(2**<число_бит> -1)

Это обеспечивает точный перевод цветов для всех дисплеев. В случае создания изображения GIF на аппаратуре без возможности цветовой палитры, должна быть создана фиксированная палитра на основе доступных для данного оборудования цветов. Если указано отсутствие глобальной таблицы цветов, цветовая таблица по умолчанию генерируется внутренним образом так, что каждый цветовой индекс равен аппаратному цветовому индексу modulo <n>, где <n> - число доступных цветов на оборудовании.

5.5 Дескриптор изображения

Дескриптор изображения определяет действительное расположение и размеры последующего изображения внутри пространства, определенного в дескрипторе экрана. Также определяются флаги, указывающие на присутствие локальной таблицы для поиска цветов и определения последовательности высвечивания пикселов.

Каждый дескриптор изображения начинается с символа-разделителя изображений. Роль разделителя изображений состоит просто в синхронизации при входе в дескриптор изображения. Это желательно, если GIF-файл состоит более, чем из одного изображения. Этот символ определен как шестнадцатиричное 0x2C или ',' (запятая). Как только этот символ встречается между изображениями, непосредственно за ним следует дескриптор изображения.

Любой символ, встреченный между концом предыдущего изображения и символом-разделителем изображения игнорируется. Это позволит при последующих модификациях GIF допускать присутствие нескольких форматов и правильно игнорировать их старыми декодерами.

Таблица 6

Биты

7 6 5 4 3 2 1 0

Байт

Комментарии

0 0 1 0 1 1 0 0

1

‘,’ – символ-разделитель изображения

Левый край

2

3

Начало изображения в пикселах относительно левого края экрана (сначала LSB)

Верхний край

4

5

Начало изображения в пикселах относительно верхнего края экрана (сначала LSB)

Ширина

6

7

Начало изображения в пикселах (сначала LSB)

Высота

8

9

Высота изображения в пикселах (сначала LSB)

М

I

0

0

pixel

10

M=0 – Использовать глобальную таблицу цветов, игнорировать «pixel»

M=1 – Далее следует локальная таблица цветов, использовать «pixel»

I=0 – Изображение отформатировано в последовательном порядке

I=1 – Изображение отформатировано в порядке переплетения

pixel+1 – число бит на пиксел в данном изображении

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

5.6 Локальная таблица цветов

Локальная таблица цветов необязательна и определена здесь для будущего использования. Если установлен бит 'M' байта 10 в дескрипторе изображения, то вслед за дескриптором изображения следует локальная таблица цветов, которая относится только к последующему изображению.

После обработки изображения цветовую таблицу следует привести к той, которая была определена после дескриптора экрана. Заметим, что поле 'pixel' байта 10 в дескрипторе изображения используется только в том случае, если указана локальная таблица цветов. Она определяет не только размер пиксела (число битов в нем), но число элементов последующей цветовой таблицы. Число битов на пиксел также следует восстановить к тому значению, которое было определено в дескрипторе экрана, после того, как закончится обработка изображения.

5.7 Растровые данные

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

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

При первом проходе записывается каждая 8-ая строка, начиная с верхней строки окна изображения. При втором проходе записывается каждая 8-ая строка, начиная с пятой строки сверху. На третьем проходе записывается каждая 4-ая строка, начиная с третьей строки окна. Четвертый проход завершает изображение, записывая каждую вторую строку, начиная со второй строки с сверху. Ниже приведено графическое описание этого процесса.

Таблица 6

Стр.

Прох.1

Прох.2

Прох.3

Прох.4

Результат

0

**1а**

**1а**

1

**4а**

**4а**

2

**3а**

**3а**

3

**4b**

**4b**

4

**2а**

**2а**

5

**4c**

**4c**

6

**3b**

**3b**

7

**4d**

**4d**

8

**1b**

**1b**

9

**4e**

**4e**

10

**3c**

**3c**

11

**4f**

**4f**

12

**2b**

**2b**

Значения пикселов изображения обрабатываются как цветовые индексы, указывающие на существующую таблицу цветов. В результате получается цветовое значение из таблицы, которое реально воспроизводится на экране. Эти серии цветовых индексов, число которых равно ширине_изображения*высоту_изображения, пропускаются через поток данных изображения GIF по одному значению на пиксел, сжимаются и упаковываются в соответствии с версией алгоритма сжатия LZW.

5.8 Терминатор gif

Для того, чтобы обеспечить синхронизацию с окончанием файла изображения GIF, декодер GIF должен обрабатывать окончание режима GIF по символу шестнадцатиричное 0x3B или ';', найденному после окончания обработки изображения. По соглашению декодирующие программы должны делать паузу и ждать действий, указывающих, что пользователь готов к продолжению. Это может быть возврат каретки, введенный с клавиатуры или щелчок кнопкой мыши. Для интерактивных приложений эти действия пользователя должны быть переданы в ядро программы как перевод каретки, для того, чтобы вычислительный процесс мог продолжаться. Обычно декодирующая программа покидает графический режим и возвращается к предыдущему процессу.

5.9. Расширенный блок gif

Для того, чтобы обеспечить аккуратное расширение определения GIF, необходим механизм для определения упаковки внутри потока данных GIF. Расширенный блок GIF пакуется способом, похожим на тот, который использовался для растровых данных, но не сжимается. Основная структура блока приведена в таблице 7.

Таблица 7

7 6 5 4 3 2 1 0

Байт

Комментарии

0 0 1 0 0 0 0 1

1

‘!’ – Идентификатор расширенного блока

Функц.код

2

Расширенный функциональный код (0-255)

Байт-счетчик

Повторяется столько раз, сколько необходимо

Функ.байты данных

… …

0 0 0 0 0 0 0 0

Нулевой байт-счетчик (терминатор блока)

Расширенный блок GIF может непосредственно предшествовать дескриптору изображения или находиться перед терминатором GIF.

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

  1. ФОРМАТ ФАЛОВ PNG

PNG (англ. portable network graphics, произносится "Пинг") — растровый формат, предназначенный для хранения и передачи растровых изображений: черно-белых и альфа данных - до 16 бит, а цветных - до 48 бит (truecolor). Он использует прогрессивный метод сжатия без потерь, позволяет сохранять в файле палитру, текстовую информацию и обеспечивает прозрачность. Он специально предназначен для передачи графических данных в сети. PNG был создан как свободный формат для замены GIF.

6.1 Общие сведения

Формат PNG создан, как альтернатива формату GIF от CompuServe, потому что фирма CompuServe, владея правами на этот формат, запрещало свободное использование метода сжатия LZW (сжатие, используемое в GIF - файле) в программных продуктах. В шутку аббревиатуру PNG рекурсивно расшифровывают - "PNG's Not GIF" ("ПНГ - Не ГИФ"). PNG создавался как простой и легко распространяемый формат, содержащий в себе все преимущества формата GIF, абсолютно бесплатный и без всяких лицензионных прав и разногласий.

PNG и GIF89a обладают следующими свойствами:

  • формат организован в виде потока данных;

  • "сжатие без потерь";

  • позволяет хранить индексированные изображения с палитрой до 256 цветов;

  • прогрессивное отображение чересстрочных данных;

  • Поддержка "прозрачного цвета";

  • возможность хранить данные общего и ограниченного доступа;

  • не зависят от "железа" и платформы;

Ниже перечислены преимущества PNG над GIF в общих чертах:

  • метод сжатия данных не обременён юридическими проблемами;

  • более быстрое прогрессивное отображение чересстрочных схем;

  • расширенные возможности хранения пользовательских данных;

А следующие возможности PNG в формате GIF вообще отсутствуют:

  • xранение полноцветных 48-битовых изображений;

  • xранение 16-битовых чёрно-белых изображений;

  • полный Альфа-канал;

  • указатель на контрастность;

  • CRC - метод обнаружения ошибок в потоке данных;

  • стандартный инструментарий для разработки приложений чтения и записи PNG;

  • стандартный набор тестовых изображений для проверки этих приложений.

Но, всё же, некоторые особенности GIF не найдены в PNG версии 1.0:

  • возможность хранения нескольких изображений в одном файле.

  • анимация

В отличие от многих других форматов, создатели которых (2-3 программиста) не заботятся о дальнейшем его развитии, PNG был создан особым комитетом, в состав которого вошли заинтересованные в этом специалисты и противники GIF (в список авторов спецификации PNG версии 1.0 вошли 23 фамилии) во главе с Томасом Бутеллом. PNG считается одним из лучших форматов, так как позволяет дополнять формат возможностями, не нарушая его функциональности и не требуя изменения уже существующих программных пакетов, работающих с форматом PNG, а спецификация формата является наиболее полной и понятной.

6.2 Организация файла

PNG файл или поток данных состоит из 8-байтовой опознавательной подписи, за которой следуют 3 или более независимых блоков данных, соответствующих определённой структуре. Каждый блок имеет своё собственное определение внутреннего формата. Они читаются по очереди, от начала к концу файла или потока данных.

Некоторые другие форматы также используют структуру из блоков данных. Наиболее известные среди них: GIF, IFF и RIFF. Данные в этих форматах читаются от начала к концу. Это избавляет от надобности прыгать по файлу, используя начальную адресацию. Это также позволяет без проблем использовать эти форматы с сетевыми протоколами и протоколами передачи данных. Несмотря на то, что эти форматы обычно описываются, как форматы файлов, более точным определением будет поток данных, сохранённый в файле.

В формате PNG определено 4 типа стандартных блоков, иначе именуемых критические блоки, которые должны поддерживаться любой программой чтения и записи PNG. Далее следует перечень этих блоков:

Заголовочный блок (IHDR)

Заголовочный блок содержит основную информацию о данных изображения и должен быть первым блоком в потоке данных PNG (не допускается более одного заголовочного блока).

Блок палитры (PLTE)

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

Данные изображения (IDAT)

Блок данных изображения содержит в себе само изображение, и допускается несколько таких блоков в потоке данных, причём все они должны вплотную примыкать друг к другу.

Замыкающий блок изображения (IEND)

Замыкающий блок изображения должен находиться в конце файла или потока данных PNG.

Среди этих блоков, IHDR, IDAT и IEND должны присутствовать в любом потоке данных PNG.

Необязательные блоки, именуемые вспомогательные блоки, могут быть игнорированы программой чтения и необязательны для включения в файл программами записи PNG файлов. Тем не менее, отсутствие поддержки вспомогательных блоков может сказаться на непрвальном отображении изображения PNG. Оно может быть слишком затемнённым, слишком светлым или вообще отображаться в совершенно другом виде, не задуманном создателем этого изображения. Рекомендуется поддержка и использование большинства стандартных и вспомогательных блоков (в частности, блока Контрастности Изображения) программами, работающими с PNG.

Вместе критические и вспомогательные блоки, определённые в спецификации PNG, соответствуют термину стандартные блоки. Люди, создающие разные спецификации PNG, ведут список дополнительных блоков, именуемых иначе специальные блоки, подлежащие огласке. Эти блоки имеют специальное применение и используются гораздо реже стандартных блоков. Список этих специальных блоков время от времени должен обновляться. Некоторые приложения могут создавать частные, закрытые для общего доступа блоки для данных, которые не должны читаться другими приложениями.

Ниже вкратце описаны все стандартные и специальные блоки, объявленные в издании 1.0 спецификации PNG и связанной с ней документации. Блоки распределены в относительном (но не единственно возможном) порядке, в котором они могут быть организованы в потоке данных PNG.

Таблица 8 PNG-1: Блоки PNG

Тип блока

Многократный

Необязательный

Положение в файле

IHDR

Нет

Нет

Первый блок

cHRM

Нет

Да

Перед PLTE и IDAT

gAMA

Нет

Да

Перед PLTE и IDAT

sBIT

Нет

Да

Перед PLTE и IDAT

PLTE

Нет

Да

Перед IDAT

bKGD

Нет

Да

После PLTE и перед IDAT

hIST

Нет

Да

После PLTE и перед IDAT

tRNS

Нет

Да

После PLTE и перед IDAT

oFFs

Нет

Да

Перед IDAT

pHYs

Нет

Да

Перед IDAT

sCAL

Нет

Да

Перед IDAT

IDAT

Да

Нет

Вместе с остальными блоками IDAT

tIME

Нет

Да

В любом месте

tEXt

Да

Да

В любом месте

zTXt

Да

Да

В любом месте

fRAc

Да

Да

В любом месте

gIFg

Да

Да

В любом месте

gIFt

Да

Да

В любом месте

gIFx

Да

Да

В любом месте

IEND

Нет

Нет

Последний блок

6.3 Детальное описание файла

Подпись PNG длиной в 8 байт содержит информацию для определения файла или потока данных, в согласии со спецификацией PNG.

typedef struct _PngSignature

{

BYTE Signature[8]; /* Идентификатор (всегда 89504E470D0A1A0Ah) */

} PNGSIGNATURE;

Подпись содержит 8 байт со значениями: 89h 50h 4Eh 47h 0Dh 0Ah 1Ah 0Ah ("‰PNGrnn"). Эта на вид беспорядочная последовательность значений имеет довольно много практических назначений. Значение первого байта - 89h - 8-битовое значение, указывающее на то, что файл содержит двоичные данные. Если бы каждый 8-й бит был бы вырван из файла (7-битовый канал данных), то первый байт принял бы значение 09h, что указало бы на причину, по которой испорчен файл.

Остальные байты имеют следующее назначение:

  • Позволяют визуально определить поток данных (50h 4Eh 47h - "PNG")

  • Определяют передачу файла, изменяющую последовательность символов "новой строки" ("rn" становится "r", "n" или "nr")

  • Останавливает чтение потока данных PNG в операционной системе MS-DOS (Control-Z [""])

  • Определяет CR/LF преобразовательные ошибки передачи файлов (завершающий символ новой строки)

После подписи следуют 3 или более блоков данных PNG. Все блоки PNG имеют одинаковый основной формат и могут содержать переменное количество данных.

typedef struct _PngChunk

{

DWORD DataLength; /* Размер поля данных в байтах */

DWORD Type; /* Код, идентифицирующий тип блока */

BYTE Data[]; /* Собственно данные, хранящиеся в блоке */

DWORD Crc; /* CRC-32 значение полей Type и Data */

} PNGCHUNK;

DataLength - число байтов в поле Data. Это значение может варьироваться от 0 до 231-1.

Type - 4-х байтовый код, идентифицирующий тип хранящихся данных в блоке. Каждый байт в этом поле может содержать значение заглавного или прописного латинского символа таблицы ASCII (A-Z, a-z). На пример, тип блока IHDR будет выражен значением 69484452h в поле Type. Программа чтения PNG должна рассматривать коды Type как 32-битовые буквенные значения, не являющиеся символьными строками. Возможность чтения кодов типов как символов таблицы ASCII существует лишь для удобства человеку.

Поле Data - собственно данные, хранящиеся в блоке. Это поле может иметь нулевую длину, если не существует связанных с ним данных.

Crc - CRC-32 значение, просчитываемое для полей Type и Data. Это значение используется для определения, являются ли данные повреждёнными. В PNG используется алгоритм CRC, определённый в ISO 3309 и ITU-T V.42.

Блоки бывают размером от 12 байт (не содержат данных) до (231-1)+12 байт. Блоки всегда выравниваются по границам байтов, и поэтому никогда не требуется выравнивание заполнением.