我在这里尝试使用代码来制作一个 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/