gpt4 book ai didi

java - 如何保持图像比例并根据实际大小调整图像大小?

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:40 25 4
gpt4 key购买 nike

我已经搜索和谷歌搜索了很多,但找不到一个简单的解决方案。我想根据图像的实际大小调整图像大小,同时保留图像比例。正如您从以下示例代码中看到的,将preserveRatio 属性设置为true,我可以调整图像大小。但是,当我调整图像的实际宽度或高度时,会出现空白。如何在不出现空白的情况下调整其大小?

package test;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;


public class Test extends Application {
private ImageView imageView = new ImageView();
@Override
public void start(Stage primaryStage) {

imageView.setImage(new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Siberischer_tiger_de_edit02.jpg/800px-Siberischer_tiger_de_edit02.jpg"));
imageView.preserveRatioProperty().set(true);

StackPane root = new StackPane();
root.getChildren().add(imageView);

imageView.fitHeightProperty().bind(root.heightProperty());
imageView.fitWidthProperty().bind(root.widthProperty());

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Test Image Resizing");
primaryStage.setScene(scene);
primaryStage.show();
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}

}

最佳答案

您还需要调整视口(viewport)以使其尺寸具有正确的比例,以便用 ImageView 填充整个区域:

@Override
public void start(Stage primaryStage) {
imageView.setImage(new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Siberischer_tiger_de_edit02.jpg/800px-Siberischer_tiger_de_edit02.jpg"));
imageView.setPreserveRatio(true);

StackPane root = new StackPane();
root.getChildren().add(imageView);
root.layoutBoundsProperty().addListener((observable, oldValue, newValue) -> {
double w = newValue.getWidth();
double h = newValue.getHeight();
imageView.setFitWidth(w);
imageView.setFitHeight(h);
double ratio = h / w;
Image image = imageView.getImage();
double ih = image.getHeight();
double iw = image.getWidth();
double vR = ih / iw;
imageView.setViewport((ratio < vR) ? new Rectangle2D(0, 0, iw, iw * ratio) : new Rectangle2D(0, 0, ih / ratio, ih));
});

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Test Image Resizing");
primaryStage.setScene(scene);
primaryStage.show();
}

在这种情况下,您可以通过使用该图像作为 root 的背景图像来实现相同的效果:

@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
root.setBackground(new Background(
new BackgroundImage(new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Siberischer_tiger_de_edit02.jpg/800px-Siberischer_tiger_de_edit02.jpg"),
BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, new BackgroundSize(0, 0, false, false, false, true)
)));

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Test Image Resizing");
primaryStage.setScene(scene);
primaryStage.show();
}

关于java - 如何保持图像比例并根据实际大小调整图像大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41659245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com