REing: MaReW
Файл, предназначенный для хранения изображений.
Расширение - slg.
Существует два типа файлов: обычные и упакованные.
Структура обычного файла представлена в таблице 1. Целые числа хранятся в Big Endian (BE).
| Смещение | Тип |
|---|---|
| 0x00 | MAGIC константа |
| 0x04 | Ширина (uint16) |
| 0x06 | Высота (uint16) |
| 0x08 | Размер данных (uint32) |
| 0x0с | Версия формата (uint32) |
| 0x10 | Данные |
Структура сжатого файла представлена в таблице 2. Данные упакованы в формате gzip. Целые числа хранятся в Little Endian (LE).
| Смещение | Тип |
|---|---|
| 0x00 | MAGIC константа |
| 0x04 | Ширина (uint16) |
| 0x06 | Высота (uint16) |
| 0x08 | Размер данных (uint32) |
| 0x0с | Данные |
Константа для идентификации типа файла.
- 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 остаётся неиспользованным.