为什么以下代码会导致块状渐变?即渐变不平滑,你可以看到一些构成它的矩形。
有没有办法解决这个问题? 顺便说一下,我在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
}
}
答案 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]
...