История изменений
Исправление CrossFire, (текущая версия) :
Вот есть у нас QImage, на формочке хоть QLabel, хоть QML Image — который ее отображает. Вот в начальный момент времени у нас просто оригинальное изображение. Тут приходит клик с координатами:
- Он передается в определенный класс, который в единственном экземпляре на наше изображение — назовем его Нео. Пусть у Нео есть указатель на наше изображение.
- Нео говорит ага, пришел клик, надо создать НаноБота с определенной областью ответственности (передает в конструктор H,W,X,Y). Сразу же устанавливает НаноБоту задачу - отрисовка выделения. И кладет этого нанобота в список.
- Допустим выделенный участок должен плавно менять цвета.
- Через 30мс мы дергаем Нео по таймеру, говорим отрисуй нам картинку. Он бежит по своему списку, запускает НаноБотов, передавая им ссылку на изображение.
- Каждый из них, зная свое текущее состояние, зная свою область ответственности, меняет пиксели определенным образом. Например при выделении нужно десять тактов увеличивать синий оттенок, потом десять уменьшать — получится анимация. Вот каждый НаноБот и хранит счетчик, описывающий текущее состояние, может флаг еще какой.
- Когда список закончится, Нео вернет результирующее изображение на отрисовку. Следующий такт начнет с оригинального и натравит ботов на него.
Осталось додумать грамотную реализацию класса/метода анимаций (может паттерн какой использовать). Ну и не создавать НаноБотов на каждое касание, а сначала искать ответственного за выбранную область в списке.
Исходная версия CrossFire, :
Вот есть у нас QImage, на формочке хоть QLabel, хоть QML Image — который ее отображает. Вот в начальный момент времени у нас просто оригинальное изображение. Тут приходит клик с координатами:
[x]Он передается в определенный класс, который в единственном экземпляре на наше изображение — назовем его Нео. Пусть у Нео есть указатель на наше изображение. [x]Нео говорит ага, пришел клик, надо создать НаноБота с определенной областью ответственности (передает в конструктор H,W,X,Y). Сразу же устанавливает НаноБоту задачу - отрисовка выделения. И кладет этого нанобота в список. [x]Допустим выделенный участок должен плавно менять цвета. [x]Через 30мс мы дергаем Нео по таймеру, говорим отрисуй нам картинку. Он бежит по своему списку, запускает НаноБотов, передавая им ссылку на изображение. [x]Каждый из них, зная свое текущее состояние, зная свою область ответственности, меняет пиксели определенным образом. Например при выделении нужно десять тактов увеличивать синий оттенок, потом десять уменьшать — получится анимация. Вот каждый НаноБот и хранит счетчик, описывающий текущее состояние, может флаг еще какой. [x]Когда список закончится, Нео вернет результирующее изображение на отрисовку. Следующий такт начнет с оригинального и натравит ботов на него.
Осталось додумать грамотную реализацию класса/метода анимаций (может паттерн какой использовать). Ну и не создавать НаноБотов на каждое касание, а сначала искать ответственного за выбранную область в списке.