Формат SLG

REing: MaReW

Файл, предназначенный для хранения изображений.

Расширение - slg.

Структура файла

Существует два типа файлов: обычные и упакованные.

Структура обычного файла представлена в таблице 1. Целые числа хранятся в Big Endian (BE).

Таблица 1

Смещение Тип
0x00 MAGIC константа
0x04 Ширина (uint16)
0x06 Высота (uint16)
0x08 Размер данных (uint32)
0x0с Версия формата (uint32)
0x10 Данные

Структура сжатого файла представлена в таблице 2. Данные упакованы в формате gzip. Целые числа хранятся в Little Endian (LE).

Таблица 2

Смещение Тип
0x00 MAGIC константа
0x04 Ширина (uint16)
0x06 Высота (uint16)
0x08 Размер данных (uint32)
0x0с Данные

MAGIC

Константа для идентификации типа файла.

  • 0х736c6730 (“slg0”) - без сжатия
  • 0x0000efbb (“\x00\x00\xef\xbb”) - с сжатием

Размер данных

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

Для сжатых - размер после упаковки.

Версия формата

Это поле есть только в несжатых файлах. Значение должно быть равно 6 (другие значения не встречались).

Данные

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

  • Растр
  • Альфа-канал

Растр

Размер растра = ширина * высота * 2.

Растр хранится в виде 16 бит на точку в формате RRRRRGGG GGGBBBBB (5 бит красный, 6 - зелёный, 5 - синий), начиная с верхней строки.

Альфа-канал (прозрачность)

Размер этого поля равен размеру всего поля данных без растра.

Каждый байт имеет формат TTVVVVVV и определяет прозрачность каждого пикселя, начиная с верхней строки. T - два бита (0 - 3), V - 6 бит (0 - 63).

Поле может T (тип) иметь значение:

  • 0 - окончание строки (V тоже равен 0). Должен быть после каждой строки.
  • 1 - прозрачный сегмент, количество прозрачных пикселей равно значению V.
  • 2 - полупрозрачный пиксель, значение V находится в диапазоне от 0 (полностью прозрачный) до 31 (непрозрачный).
  • 3 - непрозрачный сегмент, количество непрозрачных пикселей равно значению V.

При типе 2 один бит (6, старший бит) поля V остаётся неиспользованным.