在 ImageView 中居中图像
Centering an image in an ImageView
我目前正在尝试使用 JavaFX 将图像居中放置在 ImageView 中。
所以我在视图中加载图像:
Image img = new Image("...");
imageView.setImage(img);
假设图像很大 (2000x3000) 而不是 ImageView (400x100)
渲染后的图片会左对齐,我想放在ImageView的中间:
有没有办法做到这一点?
下面是一个示例代码,可能是您的案例的解决方案:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
Image image = new Image("https://upload.wikimedia.org/wikipedia/commons/a/a7/Frankenstein's_monster_(Boris_Karloff).jpg");
ImageView imageView = new ImageView();
imageView.setImage(image);
imageView.setPreserveRatio(true);
imageView.setFitWidth(400);
imageView.setFitHeight(300);
BorderPane pane = new BorderPane();
pane.setPrefSize(400, 300);
pane.setCenter(imageView);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
结果:
所以,经过几天的计算,我终于找到了一个好的方法。
我post它在这里以防有人想要实现它。
我创建了一个只需要访问 imageView 的方法:
public void centerImage() {
Image img = imageView.getImage();
if (img != null) {
double w = 0;
double h = 0;
double ratioX = imageView.getFitWidth() / img.getWidth();
double ratioY = imageView.getFitHeight() / img.getHeight();
double reducCoeff = 0;
if(ratioX >= ratioY) {
reducCoeff = ratioY;
} else {
reducCoeff = ratioX;
}
w = img.getWidth() * reducCoeff;
h = img.getHeight() * reducCoeff;
imageView.setX((imageView.getFitWidth() - w) / 2);
imageView.setY((imageView.getFitHeight() - h) / 2);
}
}
这是我的做法
import javafx.geometry.Pos;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
Image img = new Image("...");
imageView imgView = new imageView(img);
HBox hbxImg = new HBox();
hbxImg.setAlignment(Pos.CENTER);
hbxImg.getChildren().add(imgView);
这会将图像放入空的 HBox 中,您可以与 canvas 的水平中心对齐。
我目前正在尝试使用 JavaFX 将图像居中放置在 ImageView 中。
所以我在视图中加载图像:
Image img = new Image("...");
imageView.setImage(img);
假设图像很大 (2000x3000) 而不是 ImageView (400x100)
渲染后的图片会左对齐,我想放在ImageView的中间:
有没有办法做到这一点?
下面是一个示例代码,可能是您的案例的解决方案:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
Image image = new Image("https://upload.wikimedia.org/wikipedia/commons/a/a7/Frankenstein's_monster_(Boris_Karloff).jpg");
ImageView imageView = new ImageView();
imageView.setImage(image);
imageView.setPreserveRatio(true);
imageView.setFitWidth(400);
imageView.setFitHeight(300);
BorderPane pane = new BorderPane();
pane.setPrefSize(400, 300);
pane.setCenter(imageView);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
结果:
所以,经过几天的计算,我终于找到了一个好的方法。
我post它在这里以防有人想要实现它。
我创建了一个只需要访问 imageView 的方法:
public void centerImage() {
Image img = imageView.getImage();
if (img != null) {
double w = 0;
double h = 0;
double ratioX = imageView.getFitWidth() / img.getWidth();
double ratioY = imageView.getFitHeight() / img.getHeight();
double reducCoeff = 0;
if(ratioX >= ratioY) {
reducCoeff = ratioY;
} else {
reducCoeff = ratioX;
}
w = img.getWidth() * reducCoeff;
h = img.getHeight() * reducCoeff;
imageView.setX((imageView.getFitWidth() - w) / 2);
imageView.setY((imageView.getFitHeight() - h) / 2);
}
}
这是我的做法
import javafx.geometry.Pos;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
Image img = new Image("...");
imageView imgView = new imageView(img);
HBox hbxImg = new HBox();
hbxImg.setAlignment(Pos.CENTER);
hbxImg.getChildren().add(imgView);
这会将图像放入空的 HBox 中,您可以与 canvas 的水平中心对齐。