629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
||||||||||||||||
1 | ||||||||||||||||
Простой Paint - Разбор полетов16.12.2018, 17:17. Показов 5901. Ответов 53
Метки нет (Все метки)
Здравствуйте, задумал я написать простой растровый графический редактор на подобии Paint.
Совершенствовать модель буду со временем, а пока начал с простых вещей. Есть несколько вопросов:
Полный текст программы Кликните здесь для просмотра всего текста
0
|
16.12.2018, 17:17 | |
Ответы с готовыми решениями:
53
PropertyGrid разбор полетов использования Разбор "полетов" по потоку Thread IComparer. Разбор полетов Простой векторный графический редактор (разбор полётов) |
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
|
18.12.2018, 21:47 [ТС] | 21 |
Storm23, Техническое задание
Требуется создать простой растровый графический редактор, который позволяет:
Сразу скажу, что хочу разработать, потому что нравится и в целях обучения Добавлено через 8 минут Конечно, круто было бы еще добавить сюда заливку цветом, вывод координат в StatusStrip, и вообще двигать и форматировать фигуры, вставлять текст в изображение
0
|
19.12.2018, 09:21 | 22 |
Двигать и форматировать фигуры - это уже ближе к векторному редактору. В растровом можно двигать разве что фрагменты изображения.
Ну ок. И какие идеи насчет модели?
0
|
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
|
19.12.2018, 12:20 [ТС] | 23 |
Скорее это и имел в виду, ибо видел в paint'e
Добавлено через 43 минуты Модель данных
0
|
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
|
19.12.2018, 16:20 [ТС] | 25 |
Если честно, то тут я в ступоре.
По идее основные сущности редактора это его фигуры и инструменты, хотя по сути если взять ластик(инструмент) и линию(простая фигура), то это одно и тоже, ведь ластик это просто рисование цветом канвы(белым). Хорошо, пусть тогда будет абстрактный класс Object , от которого будут наследоваться все классы редактора типа Line, Curve и т. д. Еще нужен класс, который будет задавать стиль фигурам, то есть прозрачность, толщину кисти. Тогда делаем класс PaintStyle и наследуем классы Pen и Brush.
0
|
19.12.2018, 17:31 | 26 | |||||
Нет, не нужно никаких Line, Curve и т.д.
Во-первых прочитайте эту тему Простой векторный графический редактор (разбор полётов) (я думаю вы ее и так читали, но все же вам следует внимательно ее изучить). Вам нужно делать тоже самое что и там, с той разницей, что модель у вас будет немного другая конечно. Далее, предлагаю такую модель:
Document хранит слой в виде битмапа. Tool содержит два метода. Render - выводит текущее изображение, поверх которого рисуется эффект создаваемый tool (например линия). А метод Apply - должен отрисовать результат применения Tool на битмапе Document. Перед отрисовкой нужно создать точку восстановления в UndoRedoManager. Такая модель думаю подойдет как для простейших инструментов (типа рисования), так и для более сложных (изменение яркости/контраста, выделение области, копирование/сдвиг области и т.д.) Для пробы создайте один инструмент PenTool который будет рисовать линию (проводимую от руки). PenTool будет хранить линию в виде GraphicsPath, а в методе Apply - отрисовывать этот GraphicsPath на битмапе. Создайте эти классы в отдельном проекте, создайте также проект для тестов, также добавьте UndoRedoManager. Вообще-то ластик должен очищать канву, то есть выставлять alpha = 0.
2
|
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
|
19.12.2018, 18:00 [ТС] | 27 |
Честно, я сам был в этом не уверен, если правильно понимаю, то белый будет занимать место в памяти, а если alpha в 0 то нет
0
|
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
|
20.12.2018, 22:58 [ТС] | 28 |
Storm23, создал репозиторий
Пока только создал классы модели и создал проект тестов, а undo/redo manager где взять? Это то что у вас в блоге?
0
|
21.12.2018, 01:18 | 29 |
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
21.12.2018, 01:26 | 30 |
Постановка задачи - это полное математическое и т.д. описание методов решения задачи. т.е. результат всестороннего и полного анализа задачи, на основании ТЗ.
А то о чем вы говорите называется формулировка задачи
0
|
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 510
|
|
24.12.2018, 00:45 [ТС] | 31 |
Добавил
Добавлено через 2 часа 10 минут Решил вынести модель в отдельный проект библиотеки классов Добавлено через 3 часа 40 минут А как это сделать? Это нужно писать в тесте?
0
|
24.12.2018, 12:23 | 32 | |||||||||||||||
worldandlife,
Я вам написал минимальную обвязку кода и инструмент PenTool. Вникните в смысл классов, как они работают и как взаимодействуют. Затем пишите другие инструменты по аналогии. В класс Document добавил такие методы: CancelTool (отменяет текущий инструмент), ApplyTool (применяет текущий инструмент к документу), SetTool (устанавливает новый инструмент для документа). Смысл в следующем: пока инструмент активен (например PenTool) он просто рисует свои данные поверх изображения. Когда же мы применяем инструмент - он отрисовывает свои данные уже непосредственно в изображение. Полный код Document выглядит так: Document
В Document также добавлен метод CreateUndoPoint который создает точку восстановления в UndoRedoManager.Далее я реализовал инструмент PenTool. Его код: PenTool
Он реализует интерфейс IMouseHandler, который позволит ему обрабатывать движения мыши. PenTool собирает точки движения мыши и сохраняет их в списке. При рендеринге он просто рисует эти точки, соединяя их линиями. Таким образом получаем инструмент рисования карандашом. Я создал также два теста. Один - проверяет работу PenTool, другой - проверяет Undo: Test
Сделал pull request на git. Также в приложении полный исходный код на данном этапе.
2
|
01.07.2019, 18:07 | 33 |
Идея написать свой "paint"-велосипед была прекрасной, жаль что у worldandlife нет времени продолжить тему.
Однако, попытаюсь "прикрутить" к проекту своё "колесо". Я сделал fork с git проекта и буду продолжать здесь: https://github.com/ashsvis/my-first-Paint Ну а если будет что-то путное выходить, то сделаю pull request. А пока что сделано: 1. Инструмент Ластик. Крашу цветом фона. Пробовал использовать цвет Color.Transparent, что-то не выходит... 2. Добавил механизм Undo|Redo (честно позаимствовал из векторного графического редактора). 3. Сделал базовую форму для интерфейса. Так сразу видно результат. Дорогу осилит идущий!
0
|
01.07.2019, 21:21 | 34 |
Красить цветом фона - это не ластик. Это просто кисть с цветом фона.
Нужно сразу определиться с тем, как будут рисоваться полупрозрачные линии и как будет работать ластик. Это не так просто как кажется. И тогда кстати вы увидите, что ваша текущая реализация PenTool - не подходит.
0
|
02.07.2019, 08:25 | 35 | |||||
Скорее всего так, если я правильно понял назначение свойства PenStyle.Hardness:
0
|
03.07.2019, 10:13 | 37 |
Нет, нет. Я ж говорю - все сложнее. Откройте photoshop или Paint.NET и посмотрите как они работают с прозрачностью.
Во-первых, hardness - это не прозрачность карандаша, это его мягкость: Во-вторых, вот так Paint.NET рисует линию с полупрозрачностью: И вот так рисуете вы (если бы у вас поддерживалась полупрозрачность): Обратите внимание на центральный пиксел, где линии пересекаются. Нужно что бы было как в Paint.NET.
0
|
03.07.2019, 10:51 | 38 | |||||
Да, так оно и будет получаться. Я, почему-то не считал это недостатком...
Ну, а решение для ластика найдено:
0
|
03.07.2019, 11:21 | 40 |
Нет, для ластика тоже должна поддерживаться полупрозрачность (opacity) и hardness.
1
|
03.07.2019, 11:21 | |
03.07.2019, 11:21 | |
Помогаю со студенческими работами здесь
40
Открыть картинку в Paint или Paint Net если установлен Разбор полетов разбор полетов, ассемблер.. Разбор полетов. ошибка е2140 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |