有什么解决方法,如何绘制到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