Java2D与Javafx画布性能
我正在开发一个java程序,它可以在屏幕上绘制复杂的分形形状,并允许用户“放大”并四处移动以探索这些形状。这意味着为了显示分形,必须进行计算,并且必须达到一定的帧速率(约20 fps或更高) 我有一些方法可以用来实现这一点,但我想知道哪种方法的性能最好 首先,我认为可以使用一个空白的Java2D与Javafx画布性能,java,performance,javafx-2,Java,Performance,Javafx 2,我正在开发一个java程序,它可以在屏幕上绘制复杂的分形形状,并允许用户“放大”并四处移动以探索这些形状。这意味着为了显示分形,必须进行计算,并且必须达到一定的帧速率(约20 fps或更高) 我有一些方法可以用来实现这一点,但我想知道哪种方法的性能最好 首先,我认为可以使用一个空白的图像(buffereImage,特别是)和图形2D上下文来绘制屏幕外的分形,然后将其传递给将其绘制到屏幕的UI。这意味着要创建大量的图像类型,我想这会占用大量内存 类似的选择是创建两个图像,然后在显示第一个图像时在第
图像
(buffereImage
,特别是)和图形2D
上下文来绘制屏幕外的分形,然后将其传递给将其绘制到屏幕的UI。这意味着要创建大量的图像类型,我想这会占用大量内存
类似的选择是创建两个图像,然后在显示第一个图像时在第二个图像上交替绘制,反之亦然。这种方法会产生更好的性能吗
我的第三个选择是使用javafx的canvasapi,使用Canvas
而不是Image
,同时基本上做同样的事情(屏幕外绘图)
什么能给我最好的结果?或者我还有什么要考虑的?
谢谢我用JavaFX编写了一个(非动画的)分形生成器。我使用了一个可写图像,并在其PixelWriter上调用setColor。我在任务中生成了WritableImage,并从任务的调用方法返回了该映像;然后我简单地用生成的图像更新了ImageView的图像。另一个选项是在任务中生成颜色,作为整数或字节数组,并通过调用setPixels()方法之一将它们批量复制到单个可写图像中。我认为这两个都会表现得很好
据我所知,JavaFX中的画布缓存其绘图命令,然后在渲染时执行所有命令;我不认为这会表现得很好。但是我可能错了。你知道我在任务和UI之间传递两个可写映像是否比总是重新实例化一个更好吗?我怀疑这会有什么不同。我认为创建可写图像的成本与计算像素数据的成本相比完全可以忽略不计。如果它确实执行得更好,那么我认为使用一个可写映像并让任务计算一个int或字节数组将执行得同样好,并且可能会保持代码更干净。您可能只需要进行实验……您正在使用一个任务,因此GUI线程必须与执行该任务的线程同步:它可以等待很长时间(足以可见),它可以使动画延迟或非线性(有时快,有时慢)。我认为这是更好的方式使用帆布作为结果将是相当顺利。