Odyssey Magazine #00
11 декабря 1996

Система - IBM:GIF - FORMAT: описание графического формата (GIF).

<b>Система</b> - IBM:GIF - FORMAT: описание графического формата (GIF).
  Сейчас  многие  занимаются  тем, что
качают  графику  с IBM, те же кто этого
не  умеет,пытаются  научиться,  но  как
всегда информации не густо.
   Мы решили предложить вашему вниманию
описание графического формата GIF.
   И в будующем этой теме мы также пос-
тараемся уделять внимание.




 █████████████████████████████████████

              G I F (tm)
   Graphics Interchange Format (tm)
     (Формат графического обмена)

   Стандартное определение механизма
      для запоминания и передачи
   растровой графической информации

             June 15, 1987
   (c) CompuServe Incorporated, 1987
          All rights reserved

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

   GIF  и 'Graphics Interchange Format'
являются  торговой  маркой  CompuServe,
Incorporated. an H&R Block Company 5000
Arlington  Centre  Blvd. Columbus, Ohio
43220
                         (614) 457-8600


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

        Москва, ноябрь 1990 г.

        Описание  формата  графического
обмена (GIF)


               ВВЕДЕНИЕ

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

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

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

    Определение формата данных GIF

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

┌───────────────────────────────┐
│ ┌───────────────────────────┐ │
│ │     Идентификатор GIF     │ │
│ └───────────────────────────┘ │
│ ┌───────────────────────────┐ │
│ │      Дескриптор экрана    │ │
│ └───────────────────────────┘ │
│ ┌───────────────────────────┐ │
│ │ Глобальная таблица цветов │ │
│ └───────────────────────────┘ │
. . .                       . . .
│ ┌───────────────────────────┐ │  ──┐
│ │   Дескирптор изображения  │ │    │
│ └───────────────────────────┘ │    │
│ ┌───────────────────────────┐ │    │
│ │ Локальная таблица цв. Повторяется│
│ └─────────────────────от 1 до n раз│
│ ┌───────────────────────────┐ │    │
│ │      Растровые данные     │ │    │
│ └───────────────────────────┘ │ ───┘
. . .                       . . .
├─  Терминатор  GIF            ─┤
└───────────────────────────────┘

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

     Наличие в начале файла специальной
"подписи"  указывает,  что  последующие
данные  являются  действительно потоком
данных  изображения  в формате GIF. Эта
"подпись"  состоит  из  следующих шести
символов:
             G I F 8 7 a
Три   последних   символа  '87a'  могут
рассматриваться  как  номер  версии для
данного  конкретного  определения GIF и
будут использоваться в дальнейшем в ка-
честве  ссылки  на документ с описанием
GIF в зависимости от номера версии.

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

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

              биты
 7 6 5 4 3 2 1 0  Номер байта
┌───────────────┐
│               │  1
├─Ширина экрана─┤Ширина растра в пикс.
│               │  2  (сначало LSB)
├───────────────┤
│               │  3
├─Высота экрана─┤Высота растра в пикс.
│               │  4  (сначалo LSB)
├─┬─────┬─┬─────┤    M   =   1,   За
│ │     │ │     │    дескриптором
│M│  cr │0│pixel│  5 следует    гло-
├─┴─────┴─┴─────┤    бальная таблица
│   background  │  6 цветов  cr+1  =
├───────────────┤    число     битов
│0 0 0 0 0 0 0 0│  7 цветового  раз-
└───────────────┘    решения pixel+1
=  число бит/пиксел в изображении фон =
цветовой индекс фона экрана (цвет опре-
деляется  из  глобальной таблицы цветов
или из таблицы по умолчанию)

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

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

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

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

      биты
 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> - число дос-

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

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

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

      биты
 7 6 5 4 3 2 1 0  Байт #
┌───────────────┐
│0 0 1 0 1 1 0 0│  1 ',' - Символ-
├───────────────┤    разделитель изобр.
│               │  2 Начало изображения
├─ Левый край  ─┤    в пикселах относи-
│               │  3 тельно левого края
├───────────────┤   экрана(сначала LSB)
│               │  4
├─ Верхний край─┤    Начало изображения
│               │  5в пикс.относительно
├───────────────┤    верх.края экрана
│               │  6 (сначала LSB)
├─    Ширина   ─┤    Ширина изображения
│               │  7 в пикселях
├───────────────┤    (снаало LSB)
│               │  8
├─    Высота   ─┤   Высота изобр.в пикс
│               │  9    (сначала LSB)
├─┬─┬─┬─┬─┬─────┤
│M│I│0│0│0│pixel│ 10
└─┴─┴─┴─┴─┴─────┘
 M=0  - Использовать глобальную таблицу
цветов, игнорировать 'pixel'
 M=1  - Далее следует локальная таблица
цветов, использовать 'pixel'
 I=0  - Изображение  отформатировано  в
последовательном порядке
 I=1  -  Изображение  отформатировано в
порядке переплетения
 pixel+1 - число бит на пиксел в данном
изображении

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

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

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

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

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

   Изображение
   Стр. Прох.1  Прох.2  Прох.3  Прох.4
   ───────────────────────────────────
     0  **1a**
     1                          **4a**
     2                  **3a**
     3                          **4b**
     4          **2a**
     5                          **4c**
     6                  **3b**
     7                          **4d**
     8  **1b**
     9                          **4e**
    10                  **3c**
    11                          **4f**
    12          **2b**
   . . .

                   Результат
           ─────────────────
                   **1a**
                   **4a**
                   **3a**
                   **4b**
                   **2a**
                   **4c**
                   **3b**
                   **4d**
                   **1b**
                   **4e**
                   **3c**
                   **4f**
                   **2b**

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

             ТЕРМИНАТОР 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  в будущем, хотя и без
дополнительных  функциональных  возмож-
ностей.
                       Приложение А

               ГЛОССАРИЙ

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

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

   LSB  -  Сокращение от Least Signifi-
cant  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, выполненная Compu-
Serve для GIF описана в приложении w.

НПРИЛОЖЕНИЕ w

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

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

 7 6 5 4 3 2 1 0
┌───────────────┐
│  код размера  │
├───────────────┤   ───┐
│ байт-счетчик  │      │
│    блока      │      │
├───────────────┤      │
│               │      ├── Повторяется
│  байт данных  │      │   столько раз,
│               │      │   сколько
├───────────────┤   ───┘   необходимо
. . .       . . .
├───────────────┤
│0 0 0 0 0 0 0 0│
└───────────────┘ ^
      нулевой байт-счетчик
     (заканчивает поток данных)
      Преобразование изображения из се-
рии  значений  пикселов к передаваемому
или запоминаемому потоку символов вклю-
чает  несколько шагов. Вкратце эти шаги
состоят в следующем:

1.  Установка кода размера - Определяет
число  битов, необходимое для представ-
ления действительных данных.

2.  Сжатие данных - Сжатие серии пиксе-
лов изображения в серию кодов сжатия.

3.  Построение серии байтов - берет се-
рию  кодов  сжатия  и  преобразует их в
строку 8-битных данных.

4.  Упаковка  байтов  - Упаковка набора
байтов  в  блоки,  которым предшествует
символ-счетчик и вывод.

        УСТАНОВКА КОДА РАЗМЕРА

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

                СЖАТИЕ

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

1.  Определен  специальный код очистки,
который сбрасывает все параметры сжати-
я/раскрытия и таблицы в исходное состо-
яние. Значение этого кода равно 2**<код
размера>.  Например,  если  код размера
равен  4  (изображение  имеет 4 бита на
пиксел), код очистки равен 16 (двоичное
10000).  Код очистки может появляться в
любом  месте  потока данных и, следова-
тельно,  требуется,  чтобы LZW-алгоритм
обрабатывал  последующие  коды так, как
будто  бы  начался  новый поток данных.
Кодировщик  должен выводить код очистки
в качестве первого кода в каждом потоке
данных изображения.

2.  Определен код конца информации, ко-
торый  явно  указывает  на конец потока
данных изображения. Если встретится та-
кой  код,  LZW-обработка  прекращается.
Этот  код  должен быть последним кодом,
формируемым  кодировщиком для изображе-
ния.  Значение этого кода равно <Код_о-
чистки>+1.

3.  Значение  первого  доступного  кода
сжатия равно <Код_очистки>+2.

4.  Выходные коды имеют переменную дли-
ну, начиная от <код_размера>+1 битов на
код, до 12 битов на код. Тем самым мак-
симальное  значение  кода  определяется
равным  4095  (шестнадцатиричное  FFF).
Как только значение LZW-кода может пре-
высить  текущую  длину кода, длина кода
увеличивается  на  единицу.  Паковщик и
распаковщик  этих  кодов  должны  изме-
няться,   чтобы  соответствовать  новой
длине кода.

      ПОСТРОЕНИЕ 8-БИТНЫХ БАЙТОВ

     Поскольку LZW-сжатие, используемое
для GIF, создает серию кодов переменной
длиныию  8-битный  байтов так, чтобы на
самом  деле происходило запоминание или
передача символов. Это обеспечивает до-
полнительное  сжатие  изображения. Коды
формируются  в  поток битов качестве ов
сжатия.
3.  Построив изображения в вен 16 (дво-
ичное в так, как если бы они паковались
справа  налево, и затем выбираются по 8
битов  для вывода. Рассматриваемый мас-
сив  8-битных символов при упаковке ко-
дов длиной по 5 битов должен быть похож
на следующий пример:

    байт n       байт 5   байт 4
   ┌─.....─────+────────+────────+..
   │ and so on │hhhhhggg│ggfffffe│..
   └─.....─────+────────+────────+..

     байт 3   байт 2   байт 1
  .. +────────+────────+────────┐
  .. │eeeedddd│dcccccbb│bbbaaaaa│
  .. +────────+────────+────────┘
     Заметьте,  что механизм физической
упаковки будет изменяться по мере того,
как  изменяется число битов в коде сжа-
тия,  но  концептуально он остается тем
же самым.

            УПАКОВКА БАЙТОВ

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



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

Вступление - Об авторах журнала.

Вступление - вторая часть.

Вступление - навигация.

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

UPGRADE - К вопросу об установке 3.5' FDD.

Система - IBM:GIF - FORMAT: описание графического формата (GIF).

Обзор - Обзор игровых программ ...

Разборка - Описание игры THE GOONIES.

Система - Описание музыкального редактора FLASH TRACKERa v2 (for SOUND DRIVER v1.0).

Система - описание редактора спрайтов: MICROSTUDIO

Система - Студии (обзор) : MULTICOLOR STUDIO.

Приколы - "Сказка о рыбаке и рыбке."

Гости - О перспективах развития SPECCY.

Разборка - Описание игры : MAPSNATCH

Система - IS-DOS : проблемы и решенeния : RAM-DISK.

Пожелания - Пара слов вместо эпилога.


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

Похожие статьи:
Программистам - Чанки на бордюре.
DIY - Приспосабливаем мышь от Amiga к ZX Spectrum.
Рулезники! - продолжение повести (часть 3).
Байки - День города: Вот и прошла у нас ещё одна пати, о которой я и хочу вам поведать...
От авторов - задача нашeго жyрнала - донeсти пользоватeлям SРECCY как можно большe информации, как для программиста, так и для начинающeго "чайника".

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