有什麼解決方法,如何繪製到JavaFX中的圖像類似於Canvas
?不像像素,但像GraphicsContext2D
提供的高級繪圖功能。我正在嘗試創建多層次的Canvas
,並且爲每個新層使用另一個Canvas
組件看起來似乎是一種矯枉過正。或者這是正確且唯一的優先方法?JavaFX繪製到圖像
回答
使用多個canvas實例(每個圖層一個),是推薦的創建多層畫布的方法(使用immediate draw API)。這種生成分層帆布系統的方法已在Oracle JavaFX tutorials: Working with Canvas: Creating a Simple Layer System中進行了記錄和演示。
您的其他選項,可能是沒有用的帆布可言,而是使用JavaFX scene graph(retained draw API),將場景圖節點Panes(每層一個窗格)的內部分層,並把所有的層在StackPane裏面的窗格。您可以隨時通過調用StackPane上的節點snapshot API將生成的StackPane轉換爲圖像。
Isn't Canvas是否還保留了API?由於所有的操作都只是放在GrowableDataBuffer上並在事件上呈現?
是的,調用畫布API立即繪製是一個誤稱。它的確如你所說的那樣工作。儘管如此,我認爲從概念上將API視爲即時繪圖是非常有用的,因爲這對於使用API的開發人員來說顯得很相似,它更多地是使用保留的數據結構來協助初始渲染的實現細節。
就我所瞭解的實現設計而言,當您將繪圖命令發佈到畫布時,通常會將這些命令放置在緩衝區中,並在畫布的第一個渲染pulse發生時將緩衝區刷新爲圖像紋理。所以這些命令只會保留在內部實現中,直到第一次呈現事件。如果您在後續脈衝上進一步發出畫布繪製命令,那麼這些附加命令將被緩衝,然後在下一個脈衝的渲染階段刷新。
例如,如果您在單個脈衝中爲畫布發出1百萬個繪圖命令,則會看到暫停,因爲這些命令會被緩衝並呈現,但您不會看到屏幕逐漸更新一百萬次,只是一個更新。如果您以10個100萬條命令的脈衝發出1000萬個繪圖命令,則會看到屏幕更新10次。您必須向畫布發出大量繪圖命令才能看到此類行爲。
如果您在做detailed performance analysis of a JavaFX application,理解實現以正確理解性能結果非常重要,否則它不是您需要擔心的事情。我認爲這個實現細節不太可能對你的項目有嚴重的性能影響。
- 1. JavaFX畫布不是繪製圖像
- 2. 將圖像繪製到gtk.DrawingArea?
- 3. 繪製到離屏圖像
- 4. 繪製圖像
- 5. 繪製圖像?
- 6. 繪製圖像
- 7. 在JavaFX中繪製子像素?
- 8. JavaFX繪製單軸
- 9. 繪製半環 - JavaFX
- 10. 將背景圖像繪製到matplotlib圖
- 11. 試圖將圖像繪製到JPanel
- 12. JavaFX - 將rgb數組作爲圖像進行繪製
- 13. Javafx在繪製圖像時增加內存使用量
- 14. CGContext繪製圖像
- 15. 3D圖像繪製
- 16. 繪製圖像SWT
- 17. Uri圖像繪製
- 18. IB_DESIGNABLE繪製圖像
- 19. 如何繪製javafx中的峯值圖
- 20. javafx如何實時繪製圖表
- 21. 繪製圖像或繪製實心圓?
- 22. 在繪圖區域上繪製圖像
- 23. 加載圖像到ImageView JavaFX
- 24. 從右到左繪製圖像
- 25. 將圖像繪製到html5畫布
- 26. 將2D圖像繪製到Targetmarker上
- 27. QT繪製像素到圖形場景
- 28. 如何將圖像繪製到pictureBox?
- 29. 從SurfaceInkCanvas繪製筆畫到圖像
- 30. 繪製大型圖像到畫布上
Isn't Canvas是否還保留了API?由於所有的操作都只是放在GrowableDataBuffer上並在事件上呈現? – 2014-10-18 23:43:21