在ImageView中居中图像

问题描述 投票:6回答:3

我目前正在尝试使用JavaFX在ImageView中居中放置图像。

所以我将图像加载到视图中:

Image img = new Image("...");
imageView.setImage(img);

并且假设图像很大(2000x3000),而不是ImageView(400x100)

渲染的图像将在左侧对齐,我想放在ImageView的中心:

enter image description here

反正有执行该操作的吗?

imageview javafx-8
3个回答
11
投票

因此,经过数天的计算,我设法找到了一种不错的方法。

我将其发布在此处,以防有人想要实现它。

我创建了一个只需要访问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);

        }
    }

7
投票

这里是一个示例代码,可能会为您的案例提供解决方案:

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);
    }

}

结果:

enter image description here


0
投票

这是我的做法(这是我第一次在这里回答!!]

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中,您可以将其与画布的水平中心对齐。

© www.soinside.com 2019 - 2024. All rights reserved.