2013-08-07 253 views
3

我有一個對象,其中包含一個JavaFX畫布,並在其上顯示圖像。例如,對於尺寸非常大的圖像,尺寸爲4000 x 4000,畫布消耗大量內存。如何釋放Canvas內存?

我想清除內容以便稍後重新使用它。我怎樣才能做到這一點?

嘗試以下沒有幫助:

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

回答

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內部保存了繪圖命令的歷史記錄。

0

如果你不再有圖像對象的引用,你可能要等到垃圾收集運行。調用clearRect()只會使用背景色填充現有圖像。