2017-07-25 43 views
2

我正在尝试编写一个程序,将传入的USB数据放入线图中。我这样做的方式是在画布上画出一串连接所有数据点的直线。问题是,得到的线是不是平整,你可以看到如下:如何以非锯齿状方式绘制由多个线段组成的曲线

Jagged Line

我试着用图形上下文的lineTo(x, y)方法,但只是让事情变得更糟。我也尝试改变线帽和线加入参数,但没有多大帮助。

有没有更好的方法来玩“连接点”与JavaFX图形上下文?也许贝塞尔曲线?如果有,请让我知道。

+0

您是否考虑过使用内置的LineChart? https://docs.oracle.com/javafx/2/api/javafx/scene/chart/LineChart.html – Eric

+0

我不认为Canvas包含对抗锯齿线的原生支持(请参阅重复问题)。如果您在场景图形而不是画布上绘制线条,则支持抗锯齿,因此您可以尝试。 – jewelsea

+0

嗯,这[类似的问题](https://stackoverflow.com/questions/34148521/how-to-apply-antialiasing-to-javafx-methods-like-graphicscontext-fillarc)实际上表明抗锯齿确实发生在绘制形状时诸如线条之类的图元转换为画布。 – jewelsea

回答

1

我结束了最简单的解决问题的方法,这就是使用BoxBlur效果会:

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

gc.setEffect(blur); 

... 

//Don't forget to remove the effect before clearing 
gc.setEffect(null); 
gc.clearRect(0, 0, width, height); 

这不是一个确切的解决方案,但它工作得很好,我的目的。