簡體   English   中英

Javafx:如何將縮放圖像設置為節點背景

[英]Javafx: How to set a scaled image as a node background

我有一個簡單的JavaFX程序,該程序使用圖像作為主Pane上的背景。 目前,我直接在.css文件中加載圖像:

.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內聯?

我知道,由於僅可以調整該圖像的大小,因此我可以調整原始圖像的大小並將其導入,但是我想知道我想做的事是否可行。

您可以使用StackPane作為Scene的根節點,然后將ImageView的實例放在堆棧的底部,並使用透明背景色(用CSS或以編程方式定義)將您以前用作根的任何內容放在其頂部)。

顯然,這可以繞過CSS,但也許足以滿足您的需要,並且可以實現所需的縮放比例。

我要做的就是刪除CSS,然后簡單地執行以下操作:

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

這是因為等效於java.awt.Image#getScaledInstance的JavaFX僅位於javafx.scene.image.Image的構造函數中。

雖然您不能使用java.awt.Image代替javafx.scene.image.Image ,但是使用javafx.scene.image.Image構造函數

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

並傳遞true作為smooth字段的值,將使用Image.SCALE_SMOOTHgetScaledInstance類似的質量圖像。 然后(如@kylejmcintyre所述),您可以將javafx.scene.image.Image傳遞給ImageView對象,並將其添加到根Pane

確保調整窗口/舞台大小時的一致性。 這就是我所做的

創建一個根節點

BorderPane root = new BorderPane();

獲取主屏幕

Screen screen = Screen.getPrimary();

設置屏幕的可見邊界

Rectangle2D bounds = screen.getVisualBounds();
double width = bounds.getWidth();
double height = bounds.getHeight();

設置與屏幕尺寸相同的背景圖像。 調整屏幕大小時,由於將圖像的寬度和高度設置為當前屏幕大小,因此背景圖像也將調整大小。

BackgroundImage bImage = new BackgroundImage(new 
Image("url here",width,height,false,true),
    BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
      BackgroundSize.DEFAULT);

root.setBackground(new Background(bImage));

通過顯示測試程序

stage.setTitle("Title here);
stage.setScene(new Scene(root));
stage.show();

希望對您有所幫助。 使Java保持活力

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM