1

我正在用 java swing 开发一个涂鸦类型的应用程序。它处于初级阶段,并在此处显示。

涂鸦板

我已经实现了撤消最后绘制的笔划的撤消功能。撤消功能可以达到最大定义的撤消级别。

撤消功能通过在Image array. 这个数组就像一个First-In-Last-Out堆栈。单击撤消时,堆栈是poped 并且获得的图像被绘制在屏幕上。

现在我面临的问题是,当前执行撤消的方法占用了太多内存。在撤消级别为 20 时,几乎 70-80 MB 的内存被用完,在级别为 30 时,会发生堆溢出。

有没有更好的方法来实现撤消功能?谢谢。

编辑:我在这里找到了一些有用的信息,可能会有所帮助。

4

1 回答 1

2

您需要以不同的方式表示绘图中的步骤。在您使用的当前方法中,您每次都将 Canvas 重新保存为未压缩的图片 - 这是内存贪婪的。

尝试重构您的代码,以便只有在 Canvas 上绘制的笔画被保存到堆栈中。这会在渲染图片时增加一点开销(每次发生更改时都需要重新绘制整个画布),但 Java 旨在处理这个问题。

仅保存形状后,内存需求应显着降低。使用Shape该类来表示画布上的笔划。

于 2012-12-20T07:32:32.750 回答