0

main の背景に画像を使用する単純な JavaFX プログラムがありますPane。現在、ファイルに画像を直接ロードしてい.cssます:

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

これは問題なく動作しますが、生成される画像の品質-fx-background-sizeはかなり劣ります。

代わりに、はるかに高品質の画像を生成するjava.awt.Image#getScaledInstancewith (または同等の JavaFX)を使用したいと思います。Image.SCALE_SMOOTH

直接使用getScaledInstanceして、どうにかして Javaawtイメージを css ファイルに渡すことはできますか? またはそれをインライン化しsetStyleますか?

この画像は一度だけサイズ変更されるので、元の画像のサイズを変更してインポートするだけでよいことは承知していますが、やりたいことが可能かどうか知りたいです。

4

3 に答える 3

1

StackPaneのルート ノードとしてa を使用し、スタックの一番下にSceneのインスタンスを配置ImageViewし、以前にルートとして使用していたものを透明な背景色 (CSS またはプログラムで定義) でその上に配置できます。

明らかにこれは CSS を回避しますが、おそらくそれで十分であり、必要なスケーリングを実現できます。

于 2014-07-03T13:57:48.477 に答える
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です。

java.awt.Imageaの代わりに a をjavafx.scene.image.Image使用することはできませんが、このjavafx.scene.image.Imageコンストラクターを使用すると、次のようになります。

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

trueフィールドの値として渡すと、 を使用した場合smoothと同様の品質の画像が得られます。次に (@kylejmcintyre が述べたように) をオブジェクトに渡してroot に追加できます。getScaledInstanceImage.SCALE_SMOOTHjavafx.scene.image.ImageImageViewPane

于 2014-07-07T16:16:59.957 に答える