- Loading...
- No images or files uploaded yet.
|
|
STCI (STI) format description russianSTСI (Sir-Tech's Crazy Image) формат.
Формат STСI используется для хранения графических объектов в игре Jagged Alliance 2. Каждый STСI файл может содержать одно или несколько изображений. Изображения кодируются с помощью 16-битного (16bppRGB565) или 8-битного (8bppIndexed) алгоритмов. 16-битные файлы содержат всегда только одно изображение, большая часть их находится в папке LOADSCREENS.
Заголовок (64 байта, структура STCIHeader).
Структура STCIHeader описана в Standard Gaming Platform\imgfmt.h.
1-4 байты – буквы “STCI” идентификатор формата. 5-8 байты – исходный размер изображений в байтах. Для файлов содержащих несколько изображений здесь хранится бессмысленное большое число. 9-12 байты – размер изображений в байтах после сжатия. 13-16 байты – номер прозрачного цвета в палитре, всегда равно 0. Имеет смысл только для 8-битных файлов. 17-20 байты – флаги. 1 бит – всегда равен 0, назначение неясно (STCI_TRANSPARENT). 2 бит – всегда равен 0, назначение неясно (STCI_ALPHA). 3 бит – 1 если файл 16-битный (STCI_RGB). 4 бит – 1 если файл 8-битный (STCI_INDEXED). 5 бит – 1 если алгоритм сжатия ZLIB (STCI_ZLIB_COMPRESSED). 6 бит – 1 если алгоритм сжатия ETRLE (STCI_ETRLE_COMPRESSED). 7-32 биты – всегда равны 0, не используются. Повидимому, флаги всегда равны 4, 40 или 41. 4 – для 16-битных файлов. 40 – для 8-битных неанимированных файлов. 41 – для 8-битных анимированных файлов. 21-22 байты – высота изображения в пикселях. Имеет смысл только для 16-битных файлов. 23-24 байты – ширина изображения в пикселях. Имеет смысл только для 16-битных файлов.
Значение следующих 20 байт разнится в зависимости от алгоритма кодирования.
25-44 байты для 16-битных файлов:
25-28 байты – маска красного цвета. Повидимому, всегда равна 63488 (00000000 00000000 11111000 00000000) . 29-32 байты – маска зелёного цвета. Повидимому, всегда равна 2016 (00000000 00000000 00000111 11100000) . 33-36 байты – маска синего цвета. Повидимому, всегда равна 31 (00000000 00000000 00000000 00011111) . 37-40 байты – маска альфа канала. Повидимому, всегда равна 0. 41 байт – глубина красного цвета. Повидимому, всегда равна 5. 42 байт – глубина зелёного цвета. Повидимому, всегда равна 6. 43 байт – глубина синего цвета. Повидимому, всегда равна 5. 44 байт – глубина альфа канала. Повидимому, всегда равна 0. Значения масок и глубин цветов соответствует алгоритму кодирования 16bppRGB565.
25-44 байты для 8-битных файлов:
25-28 байты – число цветов в палитре, повидимому всегда равно 256. 29-30 байты – число изображений в файле. 31 байт – глубина красного цвета. Повидимому, всегда равна 8. 32 байт – глубина зелёного цвета. Повидимому, всегда равна 8. 33 байт – глубина синего цвета. Повидимому, всегда равна 8. 34-44 байты – не используются. Алгоритм кодирования 8-битных файлов – 8bppIndexed c 24-битной палитрой на 256 цветов.
45 байт – глубина цвета. Число бит на пиксель. Равен 8 для 8-битных файлов, и 16 для 16-битных. 46-49 байты – размер данных приложения (Application Data) в байтах. Не равно нулю только для анимированных файлов. Повидимому, всегда равно колличеству изображений умноженное на 16. 49-64 байты – не используются.
Повидимому, существует тип STCI файлов, в которых 46-48 байты не используются размер данных приложения при этом сдвигается на три байта. Возможно это зависит от локализации. В .NET StiEditore используется именно такой порядок байт.
Изображения.
В 16-битных файлах после заголовка и до конца файла идут данные изображения закодированые в формате 16bppRGB565.
В 8-битных файлах после заголовка файла идут 256 * 3 = 768 байт палитры. После палитры идут заголовки изображений, которые занимают (кол-во изображений) * 16 байт.
Заголовок изображения(16 байт, структура STCISubImage).
Структура STCISubImage описана в Standard Gaming Platform\imgfmt.h.
1-4 байты – сдвиг в байтах от начала данных изображений до начала данных данного изображения. Для первого изображения равен 0. Для второго – размер первого и т. д. 5-8 байты – размер данных изображения в байтах. 9-10 байты – смещение изображения по горизонтали в пикселях. 11-12 байты – смещение изображения по вертикали в пикселях. 13-14 байты – высота изображения в пикселях. 15-16 байты – ширина изображения в пикселях.
После заголовков изображений идут данные изображений. Каждый байт соответствует порядковому номеру цвета пикселя в палитре. Данные изображений сжаты алгоритмом сжатия ETRLE, о котором ниже. Алгоритмом сжатия ZLIB, повидимому, не использется. Неанимированные 8-битные файлы на этом заканчиваются
У анимированных файлов есть ещё данные приложения (Application Data). Размер – (кол-во изображений) * 16. Содержание следующее:
Для изображений являющихся началом нового ракурса (направления) 1-8 байты – равны нулю, назначение не ясно. 9 байт – равен числу изображений в данном ракурсе. 10 байт – равен 2, назначение не ясно. 11-16 байты – равны нулю, назначение не ясно.
Для изображений неявляющихся началом нового ракурса (направления) 1-16 байты – равны нулю, назначение не ясно.
Алгоритм сжатия ETRLE.
Расшифровка аббривиатуры ETRLE не известна. Последние три буквы вероятно означают Run-Length Encoding.
Сжимаемая последовательность разбивается на подпоследовательности нулевых и ненулевых байт. Каждая последовательность нулевых байт заменяется на один байт, старший бит которого равен 1. А значение равно 128 плюс число нулей в подпоследовательности. Перед каждой последовательностью ненулевых байт ставится служебный байт, старший бит которого равен 0. А значение равно числу байт в подпоследовательности. Если длина нулевой подпоследовательности более 127, то для её кодирования аналогичным образом используется несколько байт, тоже самое можно сказать и о ненулевых последовательностях. В конце каждой строки ставится нулевой байт (признак конца строки).
|
Comments (0)
You don't have permission to comment on this page.