我正在用java开发一个图像编辑应用程序,它当然需要撤消重做功能。 我做了什么.... 创建了一个 State 类,其中包含一个缓冲图像、对上一个状态的引用、对下一个状态的引用。然后形成一个状态链接列表,通过单击“撤消”和“重做”按钮来回遍历。 那我想要什么.... 我观察到 bufferedimage 占用了太多的内存......比如说 4 MB 对于中等(桌面)大小的图像。你们能建议更好的方法吗???
谢谢!!
最佳答案
您应该使用Command pattern而不是 Memento pattern如果您的状态使用了太多内存。
您将拥有一个 UndoRedo 对象的链接列表,每个对象包含足够的信息来运行撤消命令或重做命令。
您必须采用不同的方式来组织命令:
- 具有双向命令。例如,当更改像素的颜色时,操作必须同时包含原始颜色和新颜色,以便命令可以双向运行。
- 每个撤消 block 有两个不同的命令。对于某些会更改图像上所有内容的命令(例如更改比例或亮度,其中有关原始图像的一些信息会丢失),您必须同时存储重做命令和撤消命令。如果它是完整图像,内存占用将与您已有的类似。
关于java - 关于图像编辑中撤消-重做状态的可维护性的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104871/