 |
Получаемое значение каждого пиксела при высвечивании
изображения будет соответствовать ближайшему доступному цвету из
цветовой таблицы дисплея. Цветовые компоненты представляют собой
значение относительной интенсивности от нулевой (0) до полной
(255). Белый цвет может быть представлен как (255,255,255), черный
как (0,0,0) и желтый как (180,180,0). При высвечивании на
дисплеях, которые поддерживают менее 8 бит на цветовую компоненту,
используются старшие биты. При создании элементов цветовой
таблицы GIF на аппаратуре, поддерживающей менее 8 бит на
компоненту, значение аппаратной компоненты должно быть
конвертировано в 8-битный формат по следующей формуле:
<значение_в_таблице> = <компонента>*255/(2**<число_бит> -1)
Это обеспечивает точный перевод цветов для всех дисплеев. В
случае создания изображения GIF на аппаратуре без возможности
цветовой палитры, должна быть создана фиксированная палитра на
основе доступных для данного оборудования цветов. Если указано
отсутствие глобальной таблицы цветов, цветовая таблица по
умолчанию генерируется внутренним образом так, что каждый цветовой
индекс равен аппаратному цветовому индексу modulo , где -
число доступных цветов на оборудовании.
- 6 -
ДЕСКРИПТОР ИЗОБРАЖЕНИЯ
Дескриптор изображения определяет действительное расположение
и размеры последующего изображения внутри пространства,
определенного в дескрипторе экрана. Также определяются флаги,
указывающие на присутствие локальной таблицы для поиска цветов и
определения последовательности высвечивания пикселов. Каждый
дескриптор изображения начинается с символа-разделителя
изображений. Роль разделителя изображений состоит просто в
синхронизации при входе в дескриптор изображения. Это желательно,
если GIF-файл состоит более, чем из одного изображения. Этот
символ определен как шестнадцатиричное 0x2C или ',' (запятая). Как
только этот символ встречается между изображениями,
непосредственно за ним следует дескриптор изображения.
Любой символ, встреченный между концом предыдущего
изображения и символом-разделителем изображения игнорируется. Это
позволит при последующих модификациях GIF допускать присутствие
нескольких форматов и правильно игнорировать их старыми
декодерами.
биты
7 6 5 4 3 2 1 0 Байт #
ЪДДДДДДДДДДДДДДДї
і0 0 1 0 1 1 0 0і 1 ',' - Символ-разделитель изображения
ГДДДДДДДДДДДДДДДґ
і і 2 Начало изображения в пикселах относи-
ГД Левый край Дґ тельно левого края экрана (сначала LSB)
і і 3
ГДДДДДДДДДДДДДДДґ
і і 4
ГД Верхний крайДґ Начало изображения в пикселах относительно
і і 5 верхнего края экрана (сначала LSB)
ГДДДДДДДДДДДДДДДґ
і і 6
ГД Ширина Дґ Ширина изображения в пикселах
і і 7 (сначала LSB)
ГДДДДДДДДДДДДДДДґ
і і 8
ГД Высота Дґ Высота изображения в пикселах
і і 9 (сначала LSB)
ГДВДВДВДВДВДДДДДґ M=0 - Использовать глобальную таблицу цве-
іMіIі0і0і0іpixelі 10 тов, игнорировать 'pixel'
АДБДБДБДБДБДДДДДЩ M=1 - Далее следует локальная таблица цве-
тов, использовать 'pixel'
I=0 - Изображение отформатировано в после-
довательном порядке
I=1 - Изображение отформатировано в поряд-
ке переплетения
pixel+1 - число бит на пиксел в данном
изображении
Описание положения и размеров экрана должно быть находиться
внутри матрицы, определенной в дескрипторе экрана. С другой
стороны, нет необходимости, чтобы изображение полностью заполняло
весь экран.
- 7 -
ЛОКАЛЬНАЯ ТАБЛИЦА ЦВЕТОВ
Локальная таблица цветов необязательна и определена здесь для
будущего использования. Если установлен бит '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.
- 8 -
ТЕРМИНАТОР GIF
Для того, чтобы обеспечить синхронизацию с окончанием файла
изображения GIF, декодер GIF должен обрабатывать окончание режима
GIF по символу шестнадцатиричное 0x3B или ';', найденному после
окончания обработки изображения. По соглашению декодирующие
программы должны делать паузу и ждать действий, указывающих, что
пользователь готов к продолжению. Это может быть возврат каретки,
введенный с клавиатуры или щелчок кнопкой мыши. Для интерактивных
приложений эти действия пользователя должны быть переданы в ядро
программы как перевод каретки, для того, чтобы вычислительный
процесс мог продолжаться. Обычно декодирующая программа покидает
графический режим и возвращается к предыдущему процессу.
РАСШИРЕННЫЙ БЛОК GIF
Для того, чтобы обеспечить аккуратное расширение определения
GIF, необходим механизм для определения упаковки внутри потока
данных GIF. Указанное расширение было определено и документировано
CompuServe для того, чтобы предусмотреть управляемый способ
усовершенствований.
Расширенный блок GIF пакуется способом, похожим на тот,
который использовался для растровых данных, но не сжимается.
Основная структура блока:
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 в будущем, хотя
и без дополнительных функциональных возможностей.
- 9 -
 |
|