如何在大表面上创建平滑的JavaFX LinearGradient?

时间:2009-06-01 03:53:17

标签: javafx linear-gradients

为什么以下代码会导致块状渐变?即渐变不平滑,你可以看到一些构成它的矩形。

有没有办法解决这个问题? 顺便说一下,我在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 :(得分:0)

块状数量并不显着。

移动到1.0的endX似乎给出了一个更明显的变化与块状结果的对角化。

一个假设是,有几件事正在发生。 1. r / g / b颜色不是真正连续的,但有256步。 (8位)。 0.8的255是204。 2.当一个颜色从0到0.8映射到600像素时,每个像素的增量不能完全平滑。我跑步的场景大小实际上是792x566。因此,在转换到下一个颜色之前,渐变将使用566/204 = 2.775像素作为一种颜色。这会导致过渡的波动。

这并不能解释为什么使用0.0到1.0表示停止(而不是0.0到0.8)结果(至少在我的运行中),这似乎是平滑过渡。


跟进:LinearGradient可能使用ofTheWay方法进行插值。代码示例和结果......

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]
...