3

我有一个包含 JavaFX 画布的对象,并在其上显示图像。对于非常大的图像,例如 4000 x 4000,画布会消耗大量内存。

我想清除内容以便以后重新使用。我怎样才能做到这一点?

尝试以下方法无济于事:

canvas.getGraphicsContext2D().clearRect(0, 0, getImage().getWidth(), getImage().getHeight());

4

2 回答 2

2

最近在openjfx-dev 邮件列表上讨论了关于向Canvas添加一个方法以释放资源的讨论——如果实现了这样的功能,那么在未来的 JavaFX 版本之前将不可用。

由于先前引用的线程,已创建以下平台调整请求:RT-32242 Canvas 应在某些 clearRect、fillRect 调用(目前计划在 Java 8 版本中实现)清除其缓冲命令。

在实现之前,您可能需要创建一个新的 Canvas 节点并将旧节点替换为新节点。

尽管它的功能不如 Canvas,但也许使用WritableImage可能足以满足您的操作,并且可能不会遇到您当前在使用 Canvas 时遇到的相同内存问题。这是因为 WritableImage 在内部只是一个像素数据的缓冲区,没有历史记录,而 Canvas 在内部保留了绘图命令的历史记录。

于 2013-08-09T18:08:21.033 回答
0

如果您不再有对图像对象的引用,则可能必须等到垃圾收集运行。调用clearRect()仅用背景颜色填充现有图像。

于 2013-08-08T18:26:52.393 回答