finally
This commit is contained in:
94
README.md
Normal file
94
README.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# 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 байт
|
||||
Reference in New Issue
Block a user