如何在大曲面上生成平滑的JavaFX LinearGradient?

如何在大曲面上生成平滑的JavaFX LinearGradient?,javafx,linear-gradients,Javafx,Linear Gradients,为什么下面的代码会导致块状渐变?i、 渐变不是平滑的,你可以看到组成它的一些矩形 有办法解决这个问题吗? 顺便说一句,我在Vista上运行这个,但我也在Mac上体验过 var stage:Stage = Stage { title: "Louis' Photo Wall" width: 900 height: 600 scene: Scene { content : Rectangle { width: bind stage.scene.width h

为什么下面的代码会导致块状渐变?i、 渐变不是平滑的,你可以看到组成它的一些矩形

有办法解决这个问题吗?
顺便说一句,我在Vista上运行这个,但我也在Mac上体验过

var stage:Stage = Stage {
title: "Louis' Photo Wall"
width: 900
height: 600

scene: Scene {
    content : Rectangle {
        width:  bind stage.scene.width
        height: bind stage.scene.height
        fill:LinearGradient {
            startX : 0.0
            startY : 0.0
            endX : 0.0
            endY : 1.0
            stops: [
                Stop {
                    color : Color {
                        red:0.0
                        blue:0.0
                        green:0.0
                    }

                    offset: 0.0
                },
                Stop {
                    color : Color {
                        red:0.8
                        blue:0.8
                        green:0.8
                    }
                    offset: 1.0
                },

            ]
        }

    }//OuterRectangle
}

}块状的数量并不显著

移动到1.0的端点似乎会使块状结果对角化,从而产生更明显的变化

一个假设是有两件事正在发生。 1.r/g/b颜色实际上不是连续的,但有256个步骤。(8位)。255的0.8等于204。 2.当一种颜色从0到0.8映射到600像素时,每个像素都会得到一个无法完全平滑的增量。当我跑步时,场景大小实际上是792x566。因此,渐变将使用566/204=2.775像素作为一种颜色,然后再切换到下一种颜色。这会在进行转换时引起波动

这并不能解释为什么停止时使用0.0到1.0(而不是0.0到0.8)的结果(至少在我的跑步中)看起来是平稳的过渡


后续:LinearGradient可能会使用一种方法进行插值。一个代码示例和结果

for (v in [0.00..1.00 step 1.0/600]) {
   println("{%7.5f v} {Color.WHITE.ofTheWay(Color.BLACK,v)}");
}
哪张照片

0.00000 javafx.scene.paint.Color[red=255,green=255,blue=255,opacity=1.0]
0.00167 javafx.scene.paint.Color[red=255,green=255,blue=255,opacity=1.0]
0.00333 javafx.scene.paint.Color[red=254,green=254,blue=254,opacity=1.0]
0.00500 javafx.scene.paint.Color[red=254,green=254,blue=254,opacity=1.0]
0.00667 javafx.scene.paint.Color[red=253,green=253,blue=253,opacity=1.0]
0.00833 javafx.scene.paint.Color[red=253,green=253,blue=253,opacity=1.0]
0.01000 javafx.scene.paint.Color[red=252,green=252,blue=252,opacity=1.0]
0.01167 javafx.scene.paint.Color[red=252,green=252,blue=252,opacity=1.0]
0.01333 javafx.scene.paint.Color[red=252,green=252,blue=252,opacity=1.0]
0.01500 javafx.scene.paint.Color[red=251,green=251,blue=251,opacity=1.0]
0.01667 javafx.scene.paint.Color[red=251,green=251,blue=251,opacity=1.0]
...

当我在WindowsXP系统上用Java1.6.0 t 11在NetBeans6.5下运行代码时,我看不出有什么问题。线性辐射产品是光滑的,而不是块状的。调整大小可保持整个窗口的渐变。我使用的显示器是三星214T(驱动速度为1600x1200)。更新后,我确实看到了它,但块状效果并不显著。请看提交的答案。当你说“块状”时,是有实心的块状物还是有一种波浪状的效果让人联想到块状物?是的,它看起来有点像在纸上打印时的渐变效果。你是对的,这是非常轻微的,但它足以注意到黑色和白色,至少。我发现更容易注意到是否有三站,黑色,白色,黑色,白色是0.9,0.9,0.9。我试着截图,但是截图的结果非常糟糕,因为某些原因。检查渐变上的实际颜色(从JavaFX的角度)显示每个特定颜色级别出现2到5次。因此,对于所使用的舞台高度,目前的波段为2像素到5像素高。