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

如何将反走样应用到像graphicscontext.fillarc()这样的javafx方法?

窦凯定
2023-03-14

这是我当前的代码:

        BorderPane root = new BorderPane();

        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        scene.getStylesheets()
                .add(getClass().getResource("application.css").toExternalForm());

        Canvas canvas = new Canvas(400, 400);
        root.getChildren().add(canvas);

        GraphicsContext gc = canvas.getGraphicsContext2D();
        new AnimationTimer()
        {
            public void handle(long currentNanoTime)
            {
                gc.setFill(Color.BLUE);
                gc.fillArc(150, 150, 100, 100, 0, 240, ArcType.ROUND);
            }
        }.start();
        primaryStage.show();

但是,fillarc()方法在屏幕上呈现边缘粗糙的形状。我想要反走样应用,以便边缘平滑。但是,我在GraphicsContext类中找不到任何相关的方法,并且将Scene的实例化更改为New Scene(root,400,400,false,SceneAntialiasing.Ballex);也没有效果。所以我的问题是如何在graphicscontext.fillarc()上实现反走样,或者从根本上说是否可行?

另外,我对javafx和cgi一般都很陌生,所以欢迎任何建议和建议。

共有1个答案

洪飞龙
2023-03-14

我在使用canvasanimationtimer时遇到了类似的问题。解决方案的一个重要关键是@Jewelsea发布的评论:

“...如果你注释掉动画定时器,只画出没有它的弧线,那么弧线就很好地反锯齿了...”

这基本上意味着,如果我们画弧,一旦它被反锯齿。但是如果我们在AnimationTimerhandle()方法中绘制它,则每秒绘制60次。在向handle()方法添加长时间睡眠后,可以更好地看到结果。第一次将圆圈呈现在白色背景上并且看起来像所需的那样。第二次在上一个蓝色圆圈的顶部呈现蓝色圆圈。由于抗锯齿,部分颜色为蓝色的像素变得更暗。第三次画圆时也会发生同样的情况,以此类推。下图显示了1,2,3,4,5,10和50次迭代后弧的放大部分:

public void handle(long currentNanoTime) {
    gc.setFill(Color.WHITE);
    gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());

    gc.setFill(Color.BLUE);
    gc.fillArc(150, 150, 100, 100, 0, 240, ArcType.ROUND);
}
 类似资料:
  • 问题内容: 我有一个像这样的数据结构: 我尝试通过$ .ajax将其发送到服务器: 我想通过烧瓶将其保存在服务器中: 工作正常! 但是我如何得到呢? 不起作用。 这是firebug中的发布数据: 问题答案: 你正在发送编码为查询字符串而不是JSON的数据。Flask能够处理JSON编码的数据,因此像这样发送它更有意义。这是你需要在客户端执行的操作: 在服务器端,通过(已解码)访问数据:

  • 我和你一样在检查东西,在facebook上发现了这个有趣的东西。 我理解,这完全可以通过类似的方式实现: 来源 我的主要问题是,他们如何阻止在控制台中总是显示在右边的.js:line_numer文件的显示? 你注意到红色的圆圈了吗?但是以facebook为例,他们不显示这些信息。我在网上找过了。Mozilla上的控制台API(链接),那么有人可能知道如何排除特定的信息吗?

  • 有没有办法让javafx中的TableView像swing中的JTable一样工作? TableView中编辑单元格内容的当前过程是: 选择单元格。 在单元格上按回车键进入编辑模式。 打字。 按回车键提交编辑。 而在jtable中要容易得多;您不必按enter键进行编辑;你可以直接编辑。 在这一点上,有没有让javafx表视图像jtable一样工作的想法?

  • 我需要能够更改应用于的css。如何使用javascript实现这一目标? 我的css存储为一个Javascript变量中的字符串。我不使用css文件。css由大约50个类组成,因此逐个应用它们是没有意义的。我知道如何通过更改最低类来实现这一点,但我只是想看看是否可以使用Javascript命令和变量。 伪码

  • 我看到一个错误消息(uncattle typeerror:Cannot read property'add eventlistener'为null)我想问题是(getElementsByTagName)但无论如何它无法到达元素我想要的问题是什么

  • 我的工作笔记本电脑运行LinuxMint作为基本操作系统,加上Virtualbox来运行Windows 7,这是实际的工作环境,通常加上一个额外的Virtualbox VM来运行不同的Windows安装,我在其中做我的客户机项目工作(我每个客户机有一个VM,以避免弄乱我的主操作系统)。 但我想知道,在客户项目中使用Docker是否可行和有益?也就是说,我想保留LinuxMint(以保持我的理智),