Пятница, 27.12.2024, 10:17
Приветствую Вас Гость | RSS

VistaMEDIA

Главная | Регистрация | Вход

Главная » Статьи » Форматы файлов

GIF

ВВЕДЕНИЕ

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

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

Первый раздел настоящего документа описывает формат данных GIF и его компоненты в приложении к декодерам GIF, вне зависимости от того являются ли они отдельной программой или частью пакета связи. Приложение B относится к декодерам являющимися частью пакетов связи и описывает протокол, необходимый для входа и существования режима GIF и отвечает на ряд специфических вопросов. Глоссарий в приложении A определяет некоторые термины, использованные в документе. Приложение C дает подробное объяснение того, как сами графические изображения пакуются в виде последовательности байтов.

ОБЩИЙ ФОРМАТ ФАЙЛА

Идентификатор GIF
Дескриптор экрана
Глобальная таблица цветов
Дескирптор изображения
Локальная таблица цветов
Растровые данные
Терминатор GIF

Блок закрашенный голубым цветом повторяется от 1 до N раз.

ИДЕНТИФИКАТОР GIF

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

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

ДЕСКРИПТОР ЭКРАНА

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

Ширина экрана 1 Ширина растра в пикселах (сначала LSB)
2
Высота экрана 3 Высота растра в пикселах (сначала LSB)
4
  5 Бит 7: M = 1, За дескриптором следует глобальная таблица цветов
Биты 4,5,6: cr+1 = число битов цветового разрешения
Бит 3: Всегда 0
Биты 2,1,0: pixel+1 = число бит/пиксел в изображении
background 6 фон - цветовой индекс фона экрана
0 7  

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

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

ГЛОБАЛЬНАЯ ТАБЛИЦА ЦВЕТОВ

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

Описание Байт
Значение красного для цвета 0 1
Значение зеленого для цвета 0 2
Значение синего для цвета 0 3
Значение красного для цвета 1 4
Значение зеленого для цвета 1 5
Значение синего для цвета 1 6
И так далее... ...

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

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

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

ДЕСКРИПТОР ИЗОБРАЖЕНИЯ

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

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

struct {
 char id; // ',' - Символ-разделитель изображения
 unsigned int left; // Начало изображения в пикселах относи
 // тельно левого края экрана (сначала LSB) 
 unsigned int up; // Начало изображения в пикселах относительно
 // верхнего края экрана (сначала LSB)
 unsigned int width; // Ширина изображения в пикселах (сначала LSB)
 unsigned int height; // Высота изображения в пикселах (сначала LSB)
 char spec; // Бит 7=0: Использовать глобальную таблицу цве-
 // тов, игнорировать 'pixel'
 // Бит 7=1: Далее следует локальная таблица цве-
 // ттов, использовать 'pixel'
 // Бит 6=0: Изображение отформатировано в после-
 // довательном порядке
 // Бит 6=1: Изображение отформатировано в поряд-
 // ке переплетения (Interleased)
 // Биты 3,4,5=0
 // Биты 0,1,2= +1 число бит на пиксел в данном
 изображении
}

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

ЛОКАЛЬНАЯ ТАБЛИЦА ЦВЕТОВ

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

РАСТРОВЫЕ ДАННЫЕ

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

 Изображение
 Стр. Прох.1 Прох.2 Прох.3 Прох.4 Результат
 ------------------------------------------------------
 0 **1a** **1a**
 1 **4a** **4a**
 2 **3a** **3a**
 3 **4b** **4b**
 4 **2a** **2a**
 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, как это определено в Приложении C.

ТЕРМИНАТОР GIF

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

РАСШИРЕННЫЙ БЛОК GIF

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

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

struct {
 char id; // '!' - Идентификатор расширенного блока
 char code; // Расширенный функциональный код (0-255)
 ... // Повторяется столько раз, сколько необходимо 
 char counter; // байт-счетчик
 char data[N]; // функ. байты данных
 ...
 char id1; // '0' - нулевой байт-счетчик (терминатор блока)
}

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

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

ПРИЛОЖЕНИЕ A - ГЛОССАРИЙ

Пиксел - Наименьший элемент графического изображения. Обычно соответствует отдельной точке на графическом экране. Разрешение изображения обычно задается в пикселах. Например, одним из довольно стандартных экранных графических форматов является 320 пикселов по горизонтали на 200 по вертикали. Каждый пиксел может быть окрашен одним из нескольких цветов в зависимости от возможностей графического оборудования.

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

LSB - Сокращение от Least Significant Byte ( младший по значению байт). Ссылается на соглашение для двух байтов числового значения, согласно которому младший по значению байт предшествует более старшему. Такое соглашение типично для микрокомпьютеров.

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

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

B Протокол - Свободно распространяемый протокол передачи файлов с исправлением ошибок, разработанный CompuServe и реализованный в продукте VIDTEX фирмы CompuServe. Такой механизм обнаружения ошибок будет использован при передаче изображений GIF для интерактивных приложений.

LZW - Совершенный алгоритм сжатия данных, основанный на работе, сделанной Lempel-Ziv и Welch, который обеспечивает возможность высокоэффективного однопроходного кодирования и декодирования. Это позволяет одновременно раскрывать и высвечивать изображения. Исходная статья, в которой был описан указанный метод:

Terry A. Welch, "A Technique for High Performance Data Compression", IEEE Computer, vol 17 no 6 (June 1984)

Этот базовый алгоритм также используется в свободно распространяемых утилитах ARC для сжатия файлов. Адаптация алгоритма LZW, выполненная CompuServe для GIF описана в приложении C.

Категория: Форматы файлов | Добавил: vistamedia (27.09.2007) | Автор: codenet.ru
Просмотров: 1303 | Комментарии: 2 | Рейтинг: 4.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории каталога

Форма входа

Поиск

Статистика

Наш опрос

Оцените мой сайт
Всего ответов: 52

Мини-чат

200
Бесплатный хостинг uCoz