我有一个包含JavaFX Canvas的Object,我在其上显示图像。对于非常大的图像,例如4000 x 4000,画布会消耗大量内存。
我想清除内容以便以后重复使用。我怎么能这样做?
尝试以下操作无济于事:
canvas.getGraphicsContext2D().clearRect(0, 0, getImage().getWidth(), getImage().getHeight());
答案 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()
的电话仅使用背景颜色填充现有图像。