关于图像编辑中撤消重做状态的可维护性的建议

时间:2011-08-18 09:04:51

标签: java image undo-redo

我正在开发一个java中的图像编辑应用程序,当然需要undo-redo功能。 我做了什么.... 创建了一个State类,它将包含一个bufferedimage,ref为prev state,ref为next状态。然后形成一个链接的状态列表,通过点击撤消和重做按钮来回遍历。 那么我想要什么.... 我观察到bufferedimage占用了太多的内存...比如说中等(桌面)大小的图像就说4 MB。你们可以建议一个更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

如果您的州使用太多内存,则应使用Command pattern代替Memento pattern

您将拥有一个UndoRedo对象的链接列表,每个对象都包含足够的信息,可以运行撤消命令或重做命令。

您必须采用不同的方式来组织命令:

  • 有双向命令。例如,在更改像素的颜色时,操作必须同时包含原始颜色和新颜色,以便命令可以在两个方向上运行。
  • 为每个undoredo集团提供两个不同的命令。对于某些更改图像上所有内容的命令(如更改比例或亮度,丢失原始图像的某些信息),您必须同时存储重做命令和要撤消的命令。它是完整的图像,内存占用将与您已有的相似。