# Minint > Растровый редактор с собственным бинарным форматом `.minint`, поддержкой слоёв, анимации и палитровых эффектов. ## Что это Desktop-приложение для создания и редактирования пиксельной графики. Изображения хранятся в собственном бинарном формате с палитровой моделью, где каждый документ (кадр) содержит свою палитру RGBA и набор слоёв. Контейнер объединяет несколько документов для анимации. ## Возможности - **Собственный формат `.minint`** — самописная бинарная сериализация с валидацией, переменным размером индексов палитры (1–4 байта) - **Слои** — добавление, удаление, переименование, порядок, видимость, прозрачность, дублирование - **Документы/кадры** — несколько документов в одном контейнере, каждый со своей палитрой - **Инструменты** — кисть, ластик (с регулируемым радиусом), заливка (flood fill), выделение + копирование/вставка - **Холст** — pan (среднее колёсико / touchpad), zoom (Ctrl+колёсико), nearest-neighbor масштабирование, пиксельная сетка - **Эффекты** — контрастность (A1), перевод в градации серого (A2) — применяются через палитру - **Копирование фрагмента (A4)** — визуальное выделение на холсте, плавающая вставка с поддержкой смены документа/слоя - **Генерация узоров (Б4)** — шахматка, градиент, полосы, концентрические круги, плитка - **Анимация** — проигрывание документов как кадров с настраиваемым delay - **Экспорт** — BMP (32-bit BGRA, самописный), GIF (анимированный, LZW, самописный) ## Стек | Компонент | Технология | |-----------|------------| | Язык | C# / .NET 10 | | UI | Avalonia 11.3.8 | | MVVM | CommunityToolkit.Mvvm 8.2.1 | | Тесты | xUnit | | Сериализация | Полностью самописная (бинарная) | | Экспорт BMP/GIF | Полностью самописный | ## Структура проекта ``` Minint.slnx ├── Minint.Core/ — Доменные модели, интерфейсы сервисов, чистая логика ├── Minint.Infrastructure/ — Сериализация .minint, экспорт BMP/GIF ├── Minint/ — Avalonia UI приложение └── Minint.Tests/ — Unit-тесты (xUnit) ``` Core не зависит ни от каких внешних пакетов. Infrastructure зависит только от Core. UI зависит от Core + Infrastructure + Avalonia. ## Требования - [.NET 10 SDK](https://dotnet.microsoft.com/download) или новее ## Сборка и запуск ```bash dotnet build dotnet run --project Minint ``` ## Тесты ```bash dotnet test ``` 37 тестов покрывают: сериализацию (round-trip), композитинг, инструменты рисования, flood fill, эффекты (контраст, grayscale), генерацию паттернов, копирование фрагмента, экспорт BMP/GIF. ## Управление | Действие | Управление | |----------|------------| | Зум | Ctrl + колёсико мыши | | Перемещение (pan) | Среднее колёсико / touchpad scroll | | Рисование | Левая кнопка мыши | | Пиксельная сетка | Ctrl+G или View > Pixel Grid | | Копирование фрагмента | Select tool → выделить → Ctrl+C → Ctrl+V → кликнуть для фиксации | | Отмена вставки | Escape | | Новый файл | Ctrl+N | | Открыть | Ctrl+O | | Сохранить | Ctrl+S | ## Формат `.minint` Подробная спецификация формата — в файле [`FORMAT.md`](FORMAT.md). Ключевые свойства: - Little-endian - Сигнатура `MININT`, версия формата - Палитра RGBA на документ, индексы переменной ширины (1–4 байта) - Полная валидация при чтении ## Ограничения - **Undo/Redo** не реализовано (архитектура не запрещает добавление) - **Размер контейнера** — все документы имеют одинаковые размеры (width × height на уровне контейнера) - **GIF квантизация** — простая popularity-based (до 256 цветов), может терять оттенки - **Максимальный размер** — 65536 × 65536 пикселей (ограничение формата) - Имена документов/слоёв — максимум 255 UTF-8 байт