LINUX.ORG.RU

История изменений

Исправление 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]Когда список закончится, Нео вернет результирующее изображение на отрисовку. Следующий такт начнет с оригинального и натравит ботов на него.

Осталось додумать грамотную реализацию класса/метода анимаций (может паттерн какой использовать). Ну и не создавать НаноБотов на каждое касание, а сначала искать ответственного за выбранную область в списке.