通过Flex中的图像处理撤消,重做功能

时间:2010-01-21 19:14:34

标签: flex image-manipulation undo-redo

所以我设法学习了一些Flex并创建了一个小应用程序:

  • 将图像加载到图像组件
  • 使用Matrix
  • 转换图像(旋转,翻转)
  • 应用过滤器

现在我正在考虑创建一些撤消重做功能。 每次我进行转换/添加过滤器时,我希望能够返回上一个图像(在操作之前)。

我的想法是拥有一个数组并将之前的位图添加到堆栈中。 但我发现转换和过滤器之间存在一些差异 我也看过ImageSnapshot和whot我可以做,它看起来像我想要的。

总体而言,我对Flex有点新意,我希望这里有人可以就此提出任何建议,并希望能为我们提供方向。

感谢您的任何建议! 最好的问候,

1 个答案:

答案 0 :(得分:0)

我建议调查Command design pattern

基本上,您的数组不包含图像,而是包含表示在图像上执行的操作的标记。每个令牌都有足够的信息来撤消(并重做?)其操作。

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);