我有一個對象,其中包含一個JavaFX畫布,並在其上顯示圖像。例如,對於尺寸非常大的圖像,尺寸爲4000 x 4000,畫布消耗大量內存。如何釋放Canvas內存?
我想清除內容以便稍後重新使用它。我怎樣才能做到這一點?
嘗試以下沒有幫助:
canvas.getGraphicsContext2D().clearRect(0, 0, getImage().getWidth(), getImage().getHeight());
我有一個對象,其中包含一個JavaFX畫布,並在其上顯示圖像。例如,對於尺寸非常大的圖像,尺寸爲4000 x 4000,畫布消耗大量內存。如何釋放Canvas內存?
我想清除內容以便稍後重新使用它。我怎樣才能做到這一點?
嘗試以下沒有幫助:
canvas.getGraphicsContext2D().clearRect(0, 0, getImage().getWidth(), getImage().getHeight());
最近有關於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內部保存了繪圖命令的歷史記錄。
如果你不再有圖像對象的引用,你可能要等到垃圾收集運行。調用clearRect()
只會使用背景色填充現有圖像。