2009-06-01 15 views
0

爲什麼下面的代碼導致塊狀漸變?即漸變不平滑,您可以看到一些構成它的矩形。如何在大表面上製作平滑的JavaFX LinearGradient?

有沒有辦法解決這個問題?
順便說一句我在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

我沒有看到這個問題,當我在Windows XP系統上運行的Java 1.6.0_11的NetBeans 6.5下的代碼。 LinearGradient產品光滑 - 不是塊狀的。調整大小保持整個窗口的漸變。我使用的顯示器是三星214T(1600x1200驅動)。 – Refactor 2009-06-01 17:16:57

+0

更新,我確實看到它,但塊狀效果並不顯着。查看提交的答案。 – Refactor 2009-06-01 18:24:10

回答

1

的塊狀量不顯着。

移動到1.0的endX似乎給出了一個更明顯的變化與塊狀結果的對角化。

一個假設是,有幾件事情正在進行。 1. r/g/b顏色並非真正連續,而是有256個步驟。 (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] 
...