当前位置: 首页 > 知识库问答 >
问题:

用笔绘制freestyle时JavaFX在画布上的慢速性能

曾新立
2023-03-14

我在这里尝试了一个JavaFX应用程序的代码,它允许我的手写笔在画布上画画:画布不会画平滑的线

当试图在画布上画画时,表演是极其痛苦的。它会冻结半秒,然后开始绘制。只有在它开始画画之后,它才是好的。不过,当你第一次用鼠标/笔按下时,延迟是相当残酷的,使其无法使用。

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);
    }
}

共有1个答案

曾德水
2023-03-14

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

 类似资料:
  • 我目前正在使用画布开发一个JavaFX-Drawing-Application。在GraphicsContext的帮助下,我使用beginPath()和lineTo()方法绘制线条,但我无法找到实现橡皮擦的适当方法。

  • 我编写了这段代码,可以在JavaFX画布上绘制。它可以很好地工作,但我不知道如何重新绘制画布(比如在Swing中),以便在新画布上重新开始绘制。这是我的代码,非常感谢你的帮助!马里奥

  • 我正在考虑将我们内部的汽车/测量应用程序从Swing移植到JavaFX,主要是因为它有更好的外观和多点触控支持,但是我找不到一种方法来渲染只有当它们可见时才可以呈现的自定义组件。 为了获得动力,想象一个有10个选项卡的屏幕,每个选项卡内都有一个显示正在测量的一些实时数据的图。任何时候,只能看到一个情节。数据量很大,计算机有足够的能力一次渲染一个情节,但不能同时渲染所有情节。 摇摆版 现在在Swin

  • 我正在用Javafx制作一个基本的绘画应用程序。我想知道是否有办法提高画布上线条的绘制速度。 正如您所看到的,使用鼠标侦听器来检测线开始的(x1,y1)位置,以及设置线应该结束的(x2,y2)位置,图形非常简单。正如您所看到的,我在绘制后清除线,这是我的意图,因为这是一个应该“显示”线应该去哪里的函数,例如在Microsoft Paint中使用线函数。然而,所有这些的问题是,这条线“滞后”在光标后

  • 我可以绘制图像,但我如何旋转该图像例如45度并绘制它,然后绘制另一个图像与-50度旋转在同一画布? 不适用于我,因为它会旋转所有画布内容。