我正在用java swing开发一个涂鸦式的应用程序。它正处于初级阶段,如图所示。
我已经实现了撤销功能,它取消了最后一次绘制的笔画。撤消功能可以升级到最大定义的撤消级别。
撤消功能的工作方式是在Image array
中每一次笔画之后复制绘图画布的内容。这个数组的作用就像一个First-In-Last-Out
堆栈。单击undo时,堆栈为poped
,并在屏幕上绘制所获得的图像。
现在我面临的问题是,当前的撤销实现方法占用了太多的内存。在撤消级别为20时,几乎70-80 MB内存耗尽,而在30级时,会发生堆溢出。
是否有更好的方法来实现撤销功能?谢谢。
编辑:我发现了一些有用的信息-- 这里,这可能会有帮助。
发布于 2012-12-20 07:32:32
您需要以不同的方式表示绘图中的步骤。在当前使用的方法中,每次重新将画布保存为未压缩的图片--即内存--是贪婪的。
尝试重构您的代码,以便只将画布上绘制的笔画保存到堆栈中。在呈现图片时,这会增加一些开销(每次发生更改时,都需要重新绘制整个画布),但是Java就是针对这个问题而设计的。
由于只保存了形状,所以内存需求应该会显著减少。使用Shape
类来表示画布上的笔画。
https://stackoverflow.com/questions/13967185
复制相似问题