Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FLI, FLC, CEL

Заголовок фрейма

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

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

Затем идут фреймы. Каждый фрейм ( в том числе и префиксный блок ) имеет заголовок длиной 16 байт, вот его описание в виде таблицы.

Смещение от начала (Байт)Размер (байт)НазваниеОписание
04SizeРазмер фрейма, включая и этот заголовок, в байтах.
42TypeТип фрейма
62ChunksЧисло блоков в данном фрейме. Максимум 4000 блоков.
88ReservРезерв, всегда 0.

Всего два типа фрейма. Для префиксного блока тип равен 0xF100, для фреймов, в которых содержатся данные по анимации равен 0xF1FA. Возможны другие типы фреймов, которые влияют на анимацию, но здесь они не описаны.

Блоки фрейма

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

Блок фрейма имеет свой заголовок размером 6 байт, за которым идут данные.

Смещение от начала (Байт)Размер (Байт)НазваниеОписание
04SizeРазмер блока, включая этот заголовок, в байтах.
42TypeТип блока.

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

Размер_фрейма = Ширина_экрана * Высота_экрана + 782 байта

Вот все фирменные типы блоков:

ЗначениеИмяОписание
4COLOR_256Настройка палитры, значения цветов от 0 до 255 ( только FLC ).
7DELTA_FLCБлок дельта-сжатия по словам ( только FLC ).
11COLOR_64Настройка палитры, значения цветов от 0 до 64 ( только FLI ).
12DELTA_FLIБлок дельта-сжатия по байтам ( только FLI ).
13BLACKЗаполнение всего экрана нулевым цветом.
15BYTE_RUNПобайтное сжатие кодированием длин серий
16FLI_COPYНе сжатое изображение
18PSTAMPНебольшое изображение для предварительного просмотра, содержится только в первом фрейме и первом блоке его, можно пропускать.

Ниже подробно описан каждый тип блока.

Блок типа 16 – несжатое изображение (FLI_COPY)

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

Блок тип 13 – заполнение экрана нулевым цветом (BLACK)

Не содержит никаких данных, кроме заголовка. Просто заполняется экран нулевым цветом.

Блок тип 15 – сжатие RLE ( BYTE_RUN )

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

Начинается с первой строки вывода анимации на экран, затем идут подряд все строки для вывода на экран. Число строк равняется высоте экрана для воспроизведения. Первый байт в строке содержит число пакетов в строке. Этот байт можно игнорировать, так как это пережиток от первой версии Animator. Возможно, что количество пакетов в строке будет больше, чем 255. Ширина вывода на экран используется для обнаружения конца строки и перехода на следующую строку. Формат пакета:

Смещение (байт)Размер (байт)НазваниеОписание
01Size_countЧисло байт для копирования и тип копирования данных ( либо повтор одного байта, либо копирование строки байт )
1??DataДанные

Если size_count больше нуля, то данные состоят из одного байта, который необходимо size_count раз вывести на экран. Если size_count меньше нуля, то необходимо вычислить абсолютное значение size_count. И столько байт должны быть скопированы на экран из data. Таким образом, число байт для копирования не может быть больше, чем 128. Данный блок имеет размер не больше, чем 64000 байт ( только для FLI ). Для FLC размер данного блока не больше, чем ширина экрана, умноженная на высоту экрана.

Блок тип 12 – блок дельта – сжатия по байтам (DELTA_FLI)

Наиболее часто встречающийся блок во FLI - файлах. Содержит различия между этим кадром и предыдущим. Такие блоки использовались только в первой версии Animator. Но, тем не менее, этот тип блока все еще может появляться и в FLC – файлах, если файл был первоначально создан Animator, но не все кадры были отредактированы Animator Pro.

Первое слово ( 16 бит ) в этом блоке указывает на начальную строку экрана для изменения. Второе слово ( 16 бит ) – число строк для изменения в данном блоке. Каждая строка кодируется отдельно. Первый байт в строке - число пакетов в этой строке. Если строка не изменилась относительно последнего фрейма, то этот байт нуль. Этот байт - положительное число, так как данный блок используется только для FLI – файлов.

Формат одиночного пакета:

Смещение (Байт)Размер (Байт)НазваниеОписание
01Skip_countПропуск столбцов
11Size_countЧисло байт для копирования и тип копирования
2??DataДанные

Пропуск столбцов пикселей обозначает, сколько столбцов пикселей необходимо пропустить относительно текущего пикселя. Если необходимо пропустить больше, чем 255 пикселей, то они будут разбиты на два пакета. Число байтов для вывода знаковое. При этом отрицательные и положительные значения имеют обратный смысл по сравнению с типом блока 15. Это сделано для эффективности. Если данный байт больше нуля, то далее следуют байты для копирования на экран. Если данный байт меньше нуля, то следующий байт должен быть повторен абсолютное значение от size_count раз.


Предыдущая | Оглавление | Следующая

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог