2026-03-30 00:14:07 +03:00
2026-03-29 12:54:32 +03:00
2026-03-29 17:25:33 +03:00
2026-03-29 18:19:39 +03:00
2026-03-30 00:14:07 +03:00
2026-03-29 12:54:32 +03:00
2026-03-29 18:36:48 +03:00
2026-03-29 18:36:48 +03:00
2026-03-29 18:36:48 +03:00
2026-03-29 18:36:48 +03:00

Minint

Растровый редактор с собственным бинарным форматом .minint, поддержкой слоёв, анимации и палитровых эффектов.

Что это

Desktop-приложение для создания и редактирования пиксельной графики. Изображения хранятся в собственном бинарном формате с палитровой моделью, где каждый документ (кадр) содержит свою палитру RGBA и набор слоёв. Контейнер объединяет несколько документов для анимации.

Возможности

  • Собственный формат .minint — самописная бинарная сериализация с валидацией, переменным размером индексов палитры (14 байта)
  • Слои — добавление, удаление, переименование, порядок, видимость, прозрачность, дублирование
  • Документы/кадры — несколько документов в одном контейнере, каждый со своей палитрой
  • Инструменты — кисть, ластик (с регулируемым радиусом), заливка (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.

Требования

Сборка и запуск

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 на документ, индексы переменной ширины (14 байта)
  • Полная валидация при чтении

Ограничения

  • Undo/Redo не реализовано (архитектура не запрещает добавление)
  • Размер контейнера — все документы имеют одинаковые размеры (width × height на уровне контейнера)
  • GIF квантизация — простая popularity-based (до 256 цветов), может терять оттенки
  • Максимальный размер — 65536 × 65536 пикселей (ограничение формата)
  • Имена документов/слоёв — максимум 255 UTF-8 байт
Description
No description provided
Readme 281 KiB
Languages
C# 100%