2014-07-02 111 views
0

我有一個簡單的JavaFX程序,它在主要的Pane上使用圖像作爲背景。目前,我直接加載圖像在我.css文件:Javafx:如何將縮放後的圖像設置爲節點背景

.pane { 
    -fx-background-image: url('map.png'); 
    -fx-background-size: 1000 800; 
} 

這工作得很好,但圖像-fx-background-size產生的質量比較差。

取而代之,我想使用java.awt.Image#getScaledInstanceImage.SCALE_SMOOTH(或JavaFX等價物),它會生成更高質量的圖像。

我可以直接使用getScaledInstance並以某種方式將Java awt圖像傳遞給我的css文件嗎?或者與setStyle一起內嵌?

我知道,因爲這幅圖像只是調整大小,一旦我可以調整原始圖像並導入,但我想知道我想做什麼是可能的。

回答

1

所有我需要做的就是刪除我的CSS和簡單地做:

Pane root = new Pane(); 
ImageView background = new ImageView(new Image("map.png", 1000, 800, false, true)); 
root.getChildren().add(background); 

這是因爲JavaFX的等效java.awt.Image#getScaledInstance只是在構造函數javafx.scene.image.Image

雖然你不能使用代替javafx.scene.image.Imagejava.awt.Image,使用this javafx.scene.image.Image constructor

Image(String url, double width, double height, boolean preserveRatio, boolean smooth) 

並通過true作爲smooth字段中的值會getScaledInstance使用Image.SCALE_SMOOTH給出了類似的圖像質量。 然後(如@kylejmcintyre提到),您可以將javafx.scene.image.Image傳遞給ImageView對象,並將其添加到您的根Pane

1

你可以在你的Scene使用StackPane爲根節點,然後放ImageView實例在堆棧的底部,無論你以前使用上具有透明背景色的它上面你的根放(定義在CSS或編程)。

很明顯,這規避了CSS,但也許它足以讓你實現你想要的縮放。

+0

哦,還有,你會想要將你的堆疊面板的寬度/高度綁定到場景的寬度/高度。 – kylejmcintyre