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 или новее
Сборка и запуск
dotnet build
dotnet run --project Minint
Тесты
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.
Ключевые свойства:
- Little-endian
- Сигнатура
MININT, версия формата - Палитра RGBA на документ, индексы переменной ширины (1–4 байта)
- Полная валидация при чтении
Ограничения
- Undo/Redo не реализовано (архитектура не запрещает добавление)
- Размер контейнера — все документы имеют одинаковые размеры (width × height на уровне контейнера)
- GIF квантизация — простая popularity-based (до 256 цветов), может терять оттенки
- Максимальный размер — 65536 × 65536 пикселей (ограничение формата)
- Имена документов/слоёв — максимум 255 UTF-8 байт