我正在开发一个 Java 程序,它可以在屏幕上绘制复杂的分形形状,并允许用户“放大”并四处移动以探索这些形状。这意味着必须进行计算才能显示分形,并且必须达到一定的帧速率(大约 20 fps 或更高)。
我有几种方法可以用来实现这一点,但我想知道哪种方法的性能最好。
首先,我认为可以使用空白的 Image
(特别是 BufferedImage
)和它的 Graphics2D
上下文来绘制屏幕外的分形,然后将其传递给将其绘制到屏幕上的 UI。这将意味着创建很多图像类型,我猜这会占用大量内存。
一个类似的选择是创建两个图像,然后在显示第一个图像的同时绘制第二个图像,反之亦然。这种方法会产生更好的性能吗?
我的第三个选择是使用 javafx 的 Canvas API,并使用 Canvas
而不是 Image
,同时基本上做同样的事情(离屏绘图)。
什么会给我最好的结果?或者还有其他我应该考虑的事情吗?
谢谢
最佳答案
我用 JavaFX 编写了一个(非动画)分形生成器。我使用了 WritableImage 并在其 PixelWriter 上调用了 setColor。我在任务中生成了 WritableImage,并从任务的调用方法中返回了图像;然后我简单地用生成的图像更新了 ImageView 的图像。另一种选择是在任务中生成颜色,作为一个整数或字节数组,并通过调用其中一个 setPixels() 方法将它们批量复制到单个 WritableImage 中。我认为其中任何一个都会表现得很好。
据我了解,JavaFX 中的 Canvas 会缓存其绘图命令,然后在渲染时执行它们;我认为这不会表现得很好。但我可能错了。
关于Java2D 与 Javafx Canvas 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21358212/