This commit is contained in:
2026-03-29 18:36:48 +03:00
parent 770dd629f5
commit 64ab493037
13 changed files with 816 additions and 19 deletions

View File

@@ -355,11 +355,11 @@ Same caveat about duplicate entries applies.
### 5.9 GIF Export
1. For each document in container, composite into RGBA buffer.
2. Use external library (e.g. `SixLabors.ImageSharp`) to encode frames
with per-frame delay from `FrameDelayMs`.
3. Output as animated GIF.
2. Quantize each frame to 256 colors (popularity-based, with transparent slot).
3. LZW-compress and write as GIF89a with per-frame delay from `FrameDelayMs`.
4. NETSCAPE2.0 application extension for infinite looping.
Only the GIF encoder is external; the `.minint` format is fully self-implemented.
Fully self-implemented — no external library for GIF encoding.
### 5.10 Pattern Generation (Б4)
@@ -438,11 +438,11 @@ Canvas (`PixelCanvas` custom control):
**Chosen**: eraser writes index 0 (transparent).
**Rationale**: consistent with palette convention; compositing naturally handles it.
### D7. GIF export library
### D7. GIF export
**Chosen**: external library for GIF encoding only (`SixLabors.ImageSharp` or equivalent).
**Rationale**: GIF LZW compression is complex and not the focus of this project.
**Constraint**: `.minint` serialization remains fully self-implemented.
**Chosen**: fully self-implemented GIF89a encoder with LZW compression.
**Rationale**: avoids external dependencies; the entire project uses only Avalonia and CommunityToolkit.Mvvm.
**Details**: popularity-based color quantization to 256 colors, NETSCAPE2.0 looping extension.
### D8. No undo/redo in initial implementation
@@ -456,16 +456,16 @@ Canvas (`PixelCanvas` custom control):
| Stage | Scope |
|-------|----------------------------------------------------|
| 1 | ✅ Architecture & design (this document) |
| 2 | Solution scaffold + domain models |
| 3 | Binary `.minint` serialization + round-trip test |
| 4 | Compositing + palette management + RGBA buffer |
| 5 | Basic Avalonia UI (main window, menus, panels) |
| 6 | Canvas: pan, zoom, grid, nearest-neighbor |
| 7 | Drawing tools: brush, eraser, flood fill, preview |
| 8 | Layer & document management UI |
| 9 | Effects: contrast, grayscale, fragment copy, patterns |
| 10 | Animation playback + BMP/GIF export |
| 11 | Polish, tests, documentation |
| 2 | Solution scaffold + domain models |
| 3 | Binary `.minint` serialization + round-trip test |
| 4 | Compositing + palette management + RGBA buffer |
| 5 | Basic Avalonia UI (main window, menus, panels) |
| 6 | Canvas: pan, zoom, grid, nearest-neighbor |
| 7 | Drawing tools: brush, eraser, flood fill, preview |
| 8 | Layer & document management UI |
| 9 | Effects: contrast, grayscale, fragment copy, patterns |
| 10 | Animation playback + BMP/GIF export |
| 11 | Polish, tests, documentation |
---
@@ -477,6 +477,6 @@ Canvas (`PixelCanvas` custom control):
| Avalonia.Desktop 11.3.8 | Minint (UI) | Desktop host |
| Avalonia.Themes.Fluent 11.3.8 | Minint (UI) | Theme |
| CommunityToolkit.Mvvm 8.2.1 | Minint (UI) | MVVM helpers |
| SixLabors.ImageSharp (TBD) | Infrastructure | GIF export only |
| _(no external deps)_ | Infrastructure | GIF/BMP fully self-implemented |
Core project: **zero** external dependencies.