gpt4 book ai didi

java - Swing App 中实现 Undo 的堆溢出

转载 作者:行者123 更新时间:2023-11-30 04:33:53 25 4
gpt4 key购买 nike

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

Scribble Board

我已经实现了撤消功能,可以撤消最后绘制的笔画。撤消功能最多可以完成定义的最大撤消级别。

撤消功能的工作原理是在图像数组中的每个笔划之后复制绘图 Canvas 的内容。该数组的作用类似于先进后出堆栈。单击撤消时,堆栈将弹出并将获得的图像绘制在屏幕上。

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

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

编辑:我发现了一些有用的信息here这可能会有所帮助。

最佳答案

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

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

仅保存形状后,内存需求应该会显着减少。使用 Shape 类来表示 Canvas 上的笔画。

关于java - Swing App 中实现 Undo 的堆溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com