5.4 KiB
5.4 KiB
Спецификация формата .minint (версия 1)
Общие сведения
- Все многобайтовые целые числа — little-endian.
- Строки — UTF-8, с префиксом длины 1 байт (макс. 255 байт).
- Формат не использует сжатие — данные хранятся как есть.
Структура файла
┌──────────────────────────┐
│ Container Header │ 28 байт (фиксированный)
├──────────────────────────┤
│ Document 1 │ (блок переменной длины)
├──────────────────────────┤
│ Document 2 │
├──────────────────────────┤
│ ... │
├──────────────────────────┤
│ Document N │
└──────────────────────────┘
Container Header (28 байт)
| Смещение | Размер | Тип | Описание |
|---|---|---|---|
| 0 | 6 | ASCII | Сигнатура: MININT |
| 6 | 2 | uint16 | Версия формата (текущая: 1) |
| 8 | 4 | uint32 | Ширина (Width) |
| 12 | 4 | uint32 | Высота (Height) |
| 16 | 4 | uint32 | Количество документов |
| 20 | 8 | — | Зарезервировано (нули) |
Блок документа
Повторяется DocumentCount раз, последовательно.
Заголовок документа
| Размер | Тип | Описание |
|---|---|---|
| 1 | uint8 | Длина имени (NameLen) |
| NameLen | UTF-8 | Имя документа |
| 4 | uint32 | FrameDelayMs |
| 4 | uint32 | Количество цветов (PalCnt) |
Палитра
PalCnt × 4 байт. Каждый цвет: [R, G, B, A] (по 1 байту).
Индекс 0 всегда соответствует прозрачному цвету (0, 0, 0, 0).
Ширина индекса
Вычисляется из PalCnt (не хранится в файле явно):
| PalCnt | Байт на индекс |
|---|---|
| 1 – 255 | 1 |
| 256 – 65 535 | 2 |
| 65 536 – 16 777 215 | 3 |
| 16 777 216+ | 4 |
Количество слоёв
| Размер | Тип | Описание |
|---|---|---|
| 4 | uint32 | Количество слоёв |
Блок слоя
Повторяется LayerCount раз.
| Размер | Тип | Описание |
|---|---|---|
| 1 | uint8 | Длина имени слоя (LayerNameLen) |
| LayerNameLen | UTF-8 | Имя слоя |
| 1 | uint8 | Видимость (0 = скрыт, 1 = виден) |
| 1 | uint8 | Opacity (0–255) |
| Width × Height × ByteWidth | bytes | Индексы палитры, row-major, LE |
Правила валидации
- Сигнатура — строго
MININT(6 байт ASCII). - Версия — строго
1(неизвестные версии отклоняются). - Width, Height >= 1; максимум 65 536.
- DocumentCount >= 1.
- PaletteCount >= 1.
- Каждый индекс пикселя < PaletteCount.
- IsVisible — только 0 или 1.
- Зарезервированные байты — допускаются ненулевые (forward compatibility).
- Неожиданный конец файла — ошибка с описанием контекста.
Пример
Контейнер 4×4, 1 документ, 2 цвета (прозрачный + красный), 1 слой:
4D 49 4E 49 4E 54 — "MININT"
01 00 — version 1
04 00 00 00 — width = 4
04 00 00 00 — height = 4
01 00 00 00 — 1 document
00 00 00 00 00 00 00 00 — reserved
05 — name length = 5
44 6F 63 20 31 — "Doc 1"
64 00 00 00 — FrameDelayMs = 100
02 00 00 00 — palette count = 2
00 00 00 00 — color 0: transparent
FF 00 00 FF — color 1: red (R=255, G=0, B=0, A=255)
01 00 00 00 — 1 layer
07 — layer name length = 7
4C 61 79 65 72 20 31 — "Layer 1"
01 — visible
FF — opacity = 255
00 00 00 00 00 00 00 00 — 16 pixels, all index 0 (transparent)
00 00 00 00 00 00 00 00