如何在javafx imageView中获取显示图像的宽度/高度?

时间:2016-09-09 09:56:32

标签: image javafx-2

我需要获取imegView中显示图像的宽度/高度,并将其与imageView.getImage()。getWidth()/ getHeight()中的原始图像大小进行比较,如果用户从应用程序GUI调整大小,则监听更改。 / p>

我从imageView.fitWidthProperty()得到这个尺码,高度类似,但我得到的图片尺寸不是图片: enter image description here

我得到蓝色的尺寸是imageView,但我需要显示图像的尺寸(绿色)。当用户调整窗口应用程序大小时,如何将其作为属性进行监听(绿色也会改变大小,但它似乎具有最大和最小大小,因此当最大或最小时,它会停止使用imageView调整大小。)

我使用此属性来计算蓝色矩形下方右下角的原始图像大小的百分比。

有可能吗?

E:下面是此标签的fxml:

<BorderPane fx:id="root" fx:controller="..."
        xmlns:fx="..." xmlns="..." stylesheets="@...css">
<center>
    <StackPane>
        <ImageView fx:id="..."/>
        <fx:include source="...fxml" fx:id="..."/>
    </StackPane>
</center>
<bottom>
    <VBox fx:id="..." minHeight="110" styleClass="small-padding" spacing="5">
        <HBox alignment="CENTER_RIGHT" spacing="5">
            <fx:include source="...fxml" resources="..."
                        fx:id="..."/>
        </HBox>
        <TextArea fx:id="..." promptText="%..." styleClass="-fx-description-text-area"/>
    </VBox>
</bottom>

3 个答案:

答案 0 :(得分:1)

  

〜→1)

Image未调整大小以涵盖所有ImageView这一事实与preserveRatio方法有关。如果您希望被覆盖setPreserveRatio(false); 结合setSmooth( true );

  

〜→2)

绿色边框是原始图像的大小。

  

〜→3)

在将Image添加到ImageView之前,您可以执行以下操作:

Image image = new Image("FILE:...");
image.getWidth( );
image.getHeight( );

这是图像的原始大小。

ImageView

中显示图像时的大小
imageView.getFitWidth();
imageView.getFitHeight();

对于场景中ImageView的大小(问题中的蓝色边框):

imageView.getWidth();
imageView.getHeight();

ImageView类具有上述属性。

答案 1 :(得分:1)

ImageView设置为保留纵横比时,必须手动计算实际尺寸。至少我没有找到另一种方式。

double aspectRatio = image.getWidth() / image.getHeight();
double realWidth = Math.min(imageView.getFitWidth(), imageView.getFitHeight() * aspectRatio);
double realHeight = Math.min(imageView.getFitHeight(), imageView.getFitWidth() / aspectRatio);

要解释一下:getFitHeight / Width是你的蓝色矩形。当保留源图像的纵横比时,蓝色矩形的至少一侧必须具有与绿色矩形的对应侧相同的长度。此外,绿色矩形将始终位于蓝色矩形内部,因此调用Math.min()

答案 2 :(得分:0)

我不知道您可以直接使用任何属性来获取您想要的数字,但您可能会建议将其作为未来JavaFX版本的改进。

您现在可以做的是编写一些代码,这些代码跟踪ImageView的所有属性,这些属性会影响显示图像的大小,然后自己计算显示的大小。这对我来说听起来并不复杂。