使用笔自由绘制时,JavaFX 在 Canvas 上的性能下降

标签 java canvas javafx

我在这里尝试使用代码来制作一个 JavaFX 应用程序,它允许我的手写笔在 Canvas 上绘图:Canvas does not draw smooth lines

尝试在 Canvas 上绘图时,性能非常痛苦。它会卡住半秒钟,然后开始绘制。只有开始绘制后才可以。事先虽然当你第一次用鼠标/笔按下时,延迟非常残酷并且使其无法使用。

这是我使用的代码:

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.effect.BoxBlur;
import javafx.scene.shape.StrokeLineCap;
import javafx.scene.shape.StrokeLineJoin;
import javafx.stage.Stage;

public class Test extends Application {

    private GraphicsContext gc;

    @Override
    public void start(Stage stage) {
        Canvas canvas = new Canvas(500, 500);
        canvas.setOnMouseDragged(e -> {
            gc.lineTo(e.getX(), e.getY());
            gc.stroke();
        });
        canvas.setOnMousePressed(e -> gc.moveTo(e.getX(), e.getY()));

        gc = canvas.getGraphicsContext2D();
        gc.setLineCap(StrokeLineCap.ROUND);
        gc.setLineJoin(StrokeLineJoin.ROUND);
        gc.setLineWidth(1);

        BoxBlur blur = new BoxBlur();
        blur.setWidth(1);
        blur.setHeight(1);
        blur.setIterations(1);
        gc.setEffect(blur);

        Group root = new Group(canvas);
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
        stage.setFullScreen(true);
    }

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

有什么方法可以解决性能问题吗?我的台式电脑很坚固,可以运行高端游戏,所以它不是我电脑上的性能。

注意:我还应该说,当您第一次在 Canvas 上按下鼠标时发生的延迟足以导致鼠标点击次数下降。

编辑:为了确认它不是 OnMousePressed,我将其注释掉但没有帮助。

最佳答案

显然我的驱动程序与 Java 有某种冲突,这意味着 JavaFX 没问题。在获得平板电脑公司的帮助和一些修复后,最新的驱动程序不会发生这种情况。

关于使用笔自由绘制时,JavaFX 在 Canvas 上的性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554425/

相关文章:

jquery - 支持 css3 和 ie8 的弧形文本

java - JavaFX 中的实时更新折线图

javafx - 在 JavaFX 中重置场景图时出现问题

java - 更新元素后重新堆化 java.util.PriorityQueue

java - 如何从数据库初始化spring bean

java - 字符串池和 String[]

javascript - 使用 HTML5 将两个 Canvas 方 block 设置到 Canvas 的中心

java - JSP EL 表达式在标记文件中不起作用

javascript - 为什么不 moveTo(0, 0); lineTo(X, X);画一条45°线?

Java 9 JavaFX 预加载器