0

我正在用 java 开发一个图像编辑应用程序,当然需要撤消重做功能。我做了什么......创建了一个包含缓冲图像的 State 类,引用到上一个状态,引用到下一个状态。然后形成一个状态链表,通过点击撤销和重做按钮来回遍历。那么我想要什么....我观察到 bufferedimage 占用了太多内存...比如说 4 MB 对于中等(桌面)大小的图像。你们能提出更好的方法吗???

谢谢!!

4

1 回答 1

4

如果您的状态使用太多内存,您应该使用命令模式而不是备忘录模式。

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

您必须以不同的方式组织命令:

  • 有双向命令。例如,当改变一个像素的颜色时,操作必须同时包含原始颜色和新颜色,以便命令可以双向运行。
  • 每个撤销块有两个不同的命令。对于更改图像上所有内容的某些命令(例如更改比例或亮度,丢失有关原始图像的某些信息),您必须存储要重做的命令和要撤消的命令。这是完整的图像,内存占用将与您已有的类似。
于 2011-08-18T09:19:07.440 回答