Отменить, повторить функциональность с манипулированием изображениями во Flex - PullRequest
1 голос
/ 21 января 2010

Итак, мне удалось изучить Flex и создать небольшое приложение, которое:

  • Загружает изображение в компонент Image
  • Преобразуйте изображение (поверните, переверните) с помощью Матрицы
  • Применить фильтр (ы)

Теперь я думаю о создании функции отмены и повтора. Каждый раз, когда я выполняю преобразование / добавляю фильтр, я хочу иметь возможность вернуться к предыдущему изображению (перед действием).

Моя мысль - создать массив и добавить предыдущее растровое изображение в стек. Но я вижу, что между преобразованиями и фильтрами есть некоторые различия Я также видел ImageSnapshot и что я могу сделать, и похоже, что я после.

Я немного новичок в Flex в целом, и я надеюсь, что кто-то здесь может дать мне какой-либо совет по этому вопросу и, надеюсь, некоторые направления.

Спасибо за любой совет! С уважением,

Ran

1 Ответ

0 голосов
/ 21 января 2010

Я предлагаю изучить шаблон проектирования команд .

По сути, ваш массив будет содержать не изображение, а токены, представляющие операцию, выполняемую над изображением. Каждый токен будет иметь достаточно информации, чтобы отменить (и повторить?) Свою работу.

var c:Command = new RotateCommand(90, CLOCKWISE);
c.doWork();
history.push(c);

// Undo
var c:Command = history.pop();
c.undoWork();

затем в командах, примерно:

public function doWork():void {
    var newTransform:Matrix = calculateTransform(angle, direction); // 90, CLOCKWISE
    image.transform.matrix.concat(newTransform);
}

public function undoWork():void {
    var newTransform:Matrix = calculateTransform(-angle, direction); // reverse operation
    image.transform.matrix.concat(newTransform);
...