JavaFX Canvas渲染性能

时间:2015-08-09 16:39:35

标签: performance canvas javafx

我在JavaFX应用程序上工作并且必须绘制很多(4000)弧形。 我正在使用图形上下文的JavaFX Canvas方法strokeArc。

应用程序执行非常弱,但不是方法strokeArc的调用,我认为延迟发生在稍后,可能在渲染。 结果是,应用程序确实需要花费大约5秒的时间来显示gui上的弧。

有没有更快的方法在JavaFX中绘制弧?

1 个答案:

答案 0 :(得分:4)

不,没有。画布是最快的。

您没有提供MCVE。我刚试了一个简单的应用程序。工作速度非常快,在6ms内绘制了4000弧。应用程序窗口立即显示。这是代码:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.shape.ArcType;
import javafx.stage.Stage;

public class ArcTest extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        Group root = new Group();
        Canvas canvas = new Canvas(300, 250);

        GraphicsContext gc = canvas.getGraphicsContext2D();

        root.getChildren().add(canvas);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();

        drawShapes(gc);

    }

    private void drawShapes(GraphicsContext gc) {

        long time = System.currentTimeMillis();

        gc.setFill(Color.GREEN);
        gc.setStroke(Color.BLUE);
        gc.setLineWidth(5);
        for( int i=0; i < 4000; i++) {
            gc.strokeArc(10, 160, 30, 30, 45, 240, ArcType.OPEN);
        }

        System.out.println( System.currentTimeMillis() - time);
    }
}

除非你提供一些包含更多信息的代码(BlendMode等),否则很难帮助你。