canvas不绘制平滑线条

在javafxcanvas中进行徒手画时,我无法获得anitialiazed线。 以下是代码……

import javafx.application.*; import javafx.event.*; import javafx.scene.*; import javafx.scene.canvas.*; import javafx.scene.control.*; import javafx.scene.input.*; import javafx.scene.shape.*; import javafx.stage.*; public class Test2 extends Application { GraphicsContext gc; public static void main(String[] args) { launch(args); } private class MouseDragged implements EventHandler { public void handle( MouseEvent e ) { gc.lineTo( e.getX(), e.getY() ); gc.stroke(); } } private class MousePressed implements EventHandler { public void handle( MouseEvent e ) { gc.moveTo( e.getX(), e.getY() ); } } @Override public void start(Stage stage) { Canvas canvas = new Canvas(500, 500); canvas.setOnMouseDragged( new MouseDragged() ); canvas.setOnMousePressed( new MousePressed() ); gc = canvas.getGraphicsContext2D(); gc.setLineCap( StrokeLineCap.ROUND ); gc.setLineJoin( StrokeLineJoin.ROUND ); gc.setLineWidth( 0.1 ); Group root = new Group(canvas); Scene scene = new Scene(root); stage.setTitle("Test2"); stage.setScene(scene); stage.show(); } } 

如果我创建一个swing应用程序,我可以提供渲染提示,以使其平滑…

 g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); 

如何在canvas中为图形上下文提供渲染命中?

尝试将此效果添加到GraphicsContext

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

所以(作为一个例子)你的start方法现在看起来像这样:

  @Override public void start(Stage stage) { Canvas canvas = new Canvas(500, 500); canvas.setOnMouseDragged( new MouseDragged() ); canvas.setOnMousePressed( new MousePressed() ); 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.setTitle("Test2"); stage.setScene(scene); stage.show(); } 

它并不完美……但是到目前为止我发现的最好的东西。