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

标签 java image undo-redo

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

谢谢!!

最佳答案

您应该使用Command pattern而不是 Memento pattern如果您的状态使用了太多内存。

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

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

  • 具有双向命令。例如,当更改像素的颜色时,操作必须同时包含原始颜色和新颜色,以便命令可以双向运行。
  • 每个撤消 block 有两个不同的命令。对于某些会更改图像上所有内容的命令(例如更改比例或亮度,其中有关原始图像的一些信息会丢失),您必须同时存储重做命令和撤消命令。如果它是完整图像,内存占用将与您已有的类似。

关于java - 关于图像编辑中撤消-重做状态的可维护性的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104871/

相关文章:

Java 扩展类访问器

css - 停止将 CSS 'a' 样式应用于链接的图像

objective-c - 带图像的 cocoa 菜单

javascript - 对可拖动(拖放)的元素应用撤消重做

javascript - CRUD AngularJS 应用程序的撤消/重做实现

events - 我们在Fabric.js中有 Canvas 修改事件吗?

java - Google App Engine - 有什么方法可以进行异步内存缓存设置吗?

java - SimpleDateFormat - 格式 - 九月 - JDK16

java - 制作基于文本的 RPG 时遇到麻烦(与文本区域/字段相关)

css - 使用 z-index 堆叠多个图像