2016-09-09 3 views
1

Мне нужно получить ширину/высоту отображаемого изображения в imegView и сравнить его с размером оригинального изображения, которое находится в imageView.getImage(). GetWidth()/getHeight() и прослушивает изменения, если пользователь изменяет его размер из графического интерфейса приложения.Как получить ширину/высоту отображаемого изображения в javafx imageView?

Я получаю этот размер от imageView.fitWidthProperty() и аналогичного по высоте, но я получаю размер ImageView не изображение в нем: 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> 

ответ

1

~> 1)

Тот факт, что Image не изменение размера, чтобы покрыть все ImageView имеет делать с сохранением метода Ratio. Если вы хотите быть охвачены 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

imageView.getFitWidth() не работает. Но я нашел то, что мне нужно в imageView.boundsInParentProperty(), поэтому проблема решена. – xav9211

0

Мне неизвестно какое-либо свойство, которое вы могли бы использовать напрямую, чтобы получить нужный вам номер, но вы можете предложить это как усовершенствование для будущей версии JavaFX.

Теперь вы можете написать код, который отслеживает все свойства ImageView, которые влияют на размер отображаемого изображения, а затем сами вычисляют отображаемый размер.Для меня это не слишком сложно.

0

Когда значение 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().

Смежные вопросы