Java 使用与完整场景的保留比率调整图像大小

Java 使用与完整场景的保留比率调整图像大小,java,javafx,java-8,Java,Javafx,Java 8,我目前正在写一个程序,我想有一个背景图像,它的大小与保留的比例,当场景正在调整大小以及。我正在使用SceneBuilder for Java 8构建fxml,我已经将图像属性绑定到我的AnchorPane属性,如下所示: imageBackground.fitHeightProperty().bind(anchorPaneBackground.heightProperty()); imageBackground.fitWidthProperty().bind(anchorPaneBackgrou

我目前正在写一个程序,我想有一个背景图像,它的大小与保留的比例,当场景正在调整大小以及。我正在使用SceneBuilder for Java 8构建fxml,我已经将图像属性绑定到我的AnchorPane属性,如下所示:

imageBackground.fitHeightProperty().bind(anchorPaneBackground.heightProperty());
imageBackground.fitWidthProperty().bind(anchorPaneBackground.widthProperty());
我现在遇到的问题是,由于保留的比率,如果不能保留比率,我的图像将无法再调整到整个场景

如何“放大”图像,使图像始终显示在整个场景中?我必须使用某种类型的倾听者,还是我忽略了什么


提前谢谢你的帮助

要保留可用于防止图像拉伸的比率,请执行以下操作:

imageBackground.setPreserveRatio(true);
从文档中:

指示在缩放以在拟合边界框内拟合图像时是否保留源图像的纵横比

如果设置为true,则会以以下方式影响此ImageView的尺寸

  • 如果仅设置了fitWidth,则会缩放高度以保留比率
  • 如果仅设置了fitHeight,则会缩放宽度以保留比率
  • 如果两者都设置了,则可以对它们进行缩放,以在保留原始纵横比的情况下在“宽高比”矩形中获得最佳拟合
如果未设置或设置为false,则会以以下方式影响此ImageView的尺寸

  • 若仅设置了fitWidth,则图像的视图宽度将缩放为匹配,高度不变
  • 若仅设置了fitHeight,则图像的视图高度将缩放为匹配,且高度不变
  • 如果两者都已设置,则图像视图将缩放以匹配两者

如果我理解正确,您的目标是:

  • 保留图像的纵横比
  • 用图像覆盖整个区域(即任何一侧都没有间隙)

  • 与其使用
    ImageView
    ,我建议将
    区域设置为您的图像。然后,您可以将背景图像设置为,这将:

    […]将图像缩放到最小尺寸,同时保留其固有的纵横比(如果有),使其宽度和高度都能完全覆盖背景定位区域

    可以通过CSS或FXML以编程方式设置背景

    在Java中:

    Image image = ...;
    BackgroundImage bgImage = new BackgroundImage(
            image,                                                 // image
            BackgroundRepeat.NO_REPEAT,                            // repeatX
            BackgroundRepeat.NO_REPEAT,                            // repeatY
            BackgroundPosition.CENTER,                             // position
            new BackgroundSize(-1, -1, false, false, false, true)  // size
    );
    anchorPaneBackground.setBackground(new Background(bgImage));
    
    在CSS中(请参阅):

    /*或您为目标区域指定的任何ID/样式类*/
    #无吗啡背景{
    -fx背景图像:url(“你的/图像/路径”);
    -背景尺寸:封面;
    -背景位置:中心;
    -外汇背景重复:无重复;
    }
    
    在FXML中(不能保证尽可能简洁):

    
    

    注意:我不相信您可以在场景生成器中设置
    区域的背景(添加样式表除外)。如果我错了,请纠正我。

    不要使用
    图像视图
    ,而是将某个
    区域的背景
    (可能是场景的根)设置为您的图像。然后将其大小设置为。您可以在代码或CSS.1中执行此操作。请定义所需的行为:是否要保持图像纵横比或拉伸图像以适合场景?这些可能相互矛盾。2.Post@c0der正如我在问题中已经说过的,纵横比应该保留,而不是拉伸。很抱歉打扰您。我不会再这样做了。您确实错过了@c0der comment中的第二句话:按照参考帮助页面上的建议执行。。