2014-07-02 50 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