Отчёт

This commit is contained in:
2026-04-07 21:00:49 +03:00
parent e81aa73669
commit 0ab6b54dff
16 changed files with 5528 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -0,0 +1,42 @@
@startuml
title ЛР2 ИВ1: структура контейнера и сериализация
rectangle "Файл .minint" {
rectangle "Header" as H
rectangle "Documents[]" as D
}
rectangle "Header" {
card "Signature: MININT"
card "Version"
card "Width, Height"
card "DocumentCount"
card "Reserved[8]"
}
rectangle "Document" {
card "Name"
card "FrameDelayMs"
card "PaletteCount"
card "Palette RGBA[]"
card "LayerCount"
card "Layers[]"
}
rectangle "Layer" {
card "Name"
card "IsVisible"
card "Opacity"
card "PixelIndices[]"
}
H --> D
D --> "Document"
"Document" --> "Layer"
note bottom
PixelIndices хранят индексы палитры.
Ширина индекса в файле: 1..4 байта
в зависимости от размера палитры.
end note
@enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@@ -0,0 +1,28 @@
@startuml
title ЛР2 ИВ1: основной рабочий цикл растрового редактора
start
:Запуск приложения;
:Инициализация EditorViewModel и PixelCanvas;
repeat
:Ожидание действий пользователя;
if (Выбран файл контейнера?) then (да)
:Чтение .minint через MinintSerializer;
:Построение модели документа;
endif
if (Режим редактирования?) then (да)
:Инструмент Brush/Eraser/Fill/Select;
:Изменение пикселей активного слоя;
:Обновление холста (composite);
endif
if (Сохранить?) then (да)
:Запись контейнера в .minint;
endif
repeat while (Продолжать работу?) is (да)
:Штатное завершение;
stop
@enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@@ -0,0 +1,26 @@
@startuml
title ЛР2 ИВ1: выделение, копирование и вставка
start
:Пользователь выбирает Select;
:Формирование прямоугольника выделения;
if (Copy/Cut?) then (да)
:Пройти выделенную область;
:Преобразовать индексы в RGBA;
:Сохранить ClipboardFragment;
if (Cut?) then (да)
:Очистить выделенную область (индекс 0);
endif
endif
if (Paste?) then (да)
:Показать "плавающий" фрагмент;
:Пользователь задаёт позицию;
:CommitPaste -> запись в слой;
:Прозрачные пиксели пропустить;
endif
:Обновить холст;
stop
@enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -0,0 +1,24 @@
@startuml
title ЛР2 ИВ1: обработка инструментов рисования
start
:Событие мыши в PixelCanvas;
:Преобразование координат экрана -> пиксель;
if (Инструмент == Brush?) then (да)
:Вычислить маску кисти (круг);
:Записать выбранный индекс цвета;
elseif (Инструмент == Eraser?) then (да)
:Вычислить маску кисти (круг);
:Записать индекс 0 (прозрачный);
elseif (Инструмент == Fill?) then (да)
:Запустить FloodFillService.Fill;
:BFS по 4-связным соседям;
:Перекрасить только область target-индекса;
else (Select)
:Передать управление блоку выделения;
endif
:Обновить итоговый буфер и холст;
stop
@enduml