我怎样才能释放Canvas内存?

时间:2013-08-07 07:39:15

标签: java javafx-2 javafx

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

我想清除内容以便以后重复使用。我怎么能这样做?

尝试以下操作无济于事:

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

2 个答案:

答案 0 :(得分:2)

最近讨论了openjfx-dev mailing list关于向Canvas添加方法以释放资源的问题 - 如果实现了这样的功能,则在未来的JavaFX发布之前将无法使用。

作为先前引用的线程的结果,已创建以下平台调整请求:RT-32242 Canvas should clear its buffered commands on certain clearRect, fillRect calls(当前计划用于Java 8版本的实现)。

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

虽然它不像Canvas那样功能,但是使用WritableImage可能对您的操作来说已经足够了,并且可能不会遇到与Canvas当前遇到的相同的内存问题。这是因为在内部,WritableImage只是没有历史记录的像素数据的缓冲区,而Canvas内部保留了绘图命令的历史记录。

答案 1 :(得分:0)

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