Java2D与Javafx Canvas性能

时间:2014-01-26 00:46:37

标签: java performance javafx-2

我正在研究一个在屏幕上绘制复杂分形的java程序,并允许用户放大"放大"并四处走动探索这些形状。这意味着必须进行计算才能显示分形,并且必须达到一定的帧速率(约20 fps或更高)。

我有一些方法可以用来实现这一目标,但我想知道哪一种方法会有最好的表现。

首先,我认为可以使用空格ImageBufferedImage,特别是)及其Graphics2D上下文在屏幕外绘制分形,然后将它传递给UI,将其绘制到屏幕上。这意味着会创建很多Image类型,我猜这些内存很贵。

类似的选项是创建两个图像,然后在显示第一个图像时在第二个图像之间交替,反之亦然。这种方法会产生更好的表现吗?

我的第三个选择是使用javafx的Canvas API,并使用Canvas代替Image,而基本上做同样的事情(屏幕外绘图)。

什么会给我最好的结果?或者我还应该考虑其他什么?

由于

1 个答案:

答案 0 :(得分:2)

我在JavaFX中编写了一个(非动画)分形生成器。我使用了WritableImage并在其PixelWriter上调用了setColor。我在Task中生成了WritableImage,并从Task的调用方法返回了Image;然后我只是用生成的图像更新了ImageView的图像。另一种选择是在Task中生成颜色,作为int或bytes的数组,并通过调用setPixels()方法之一将它们批量复制到单个WritableImage中。我认为其中任何一个都会表现得很好。

据我了解,JavaFX中的Canvas缓存其绘图命令,然后在渲染时执行它们;我不认为这会表现得那么好。但我可能错了。