finally
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user