我在JavaFX应用程序上工作并且必须绘制很多(4000)弧形。 我正在使用图形上下文的JavaFX Canvas方法strokeArc。
应用程序执行非常弱,但不是方法strokeArc的调用,我认为延迟发生在稍后,可能在渲染。 结果是,应用程序确实需要花费大约5秒的时间来显示gui上的弧。
有没有更快的方法在JavaFX中绘制弧?
答案 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等),否则很难帮助你。