JavaFX: получение правильных координат и размеров в imageView после масштабирования

У меня есть imageView внутри ScrollPane, и мне нужно реализовать функцию масштабирования. Я проверил этот код здесь и немного его отредактировал, потому что я не хочу делать масштабирование при прокрутке (я хочу, чтобы движение колесика мыши оставалось только для прокрутки изображения), поэтому я добавил 2 кнопки "Увеличить" и "Увеличить" OUT", и я использовал переменную"delta"вместо event.getDeltaY() в фильтре событий ScrollPane, и код теперь выглядит следующим образом:

Основной класс:

  double delta = 0;
  Zooming zoomElement = new Zooming();
  Button zoomIn = new Button();
  Button zoomOut = new Button();

  zoomIn.setText("Zoom IN");
  zoomIn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
                System.out.println("Zooming in, delta = " + delta);
                zoomElement.zoom(imageView, scroller,delta, delta+10);
                delta = delta + 10;
                }       
    });

    zoomOut.setText("Zoom OUT");
    zoomOut.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {    
               System.out.println("Zooming out, delta = " + delta);
               zoomElement.zoom(imageView, scroller,delta, delta-10);
               delta = delta - 10;
        }
    });

Класс масштабирования:

public class Zooming {

    final DoubleProperty zoomProperty = new SimpleDoubleProperty(200);

    public void zoom (ImageView imageView, ScrollPane scroller , double delta , double nextDelta){

     zoomProperty.addListener(new InvalidationListener() {
            @Override
            public void invalidated(Observable arg0) {

                    imageView.setFitWidth(zoomProperty.get() * 4);
                    imageView.setFitHeight(zoomProperty.get() * 3);
            }
      });
                if (delta < nextDelta) {
                    zoomProperty.set(zoomProperty.get() * 1.1);
                } else if (delta > nextDelta) {
                    zoomProperty.set(zoomProperty.get() / 1.1);
                }
    }

}

Проблема в том, что я делаю измерения этого изображения, такие как координаты щелчка мыши и некоторые формы ширины и высоты. После масштабирования все эти измерения неверны, например, ширина сечения в изображении составляет 213,0, а после 4-кратного увеличения - 305,0.

Есть ли способ сохранить правильность этих измерений независимо от того, насколько сильно я увеличиваю изображение?

Код, используемый для измерения:

public static class RubberBandSelection {

        final DragContext dragContext = new DragContext();
        Rectangle rect = new Rectangle();

        Group group;


        public Bounds getBounds() {
            return rect.getBoundsInParent();
        }

        public RubberBandSelection( Group group) {

            this.group = group;

            rect = new Rectangle( 0,0,0,0);
            rect.setStroke(Color.BLUE);
            rect.setStrokeWidth(1);
            rect.setStrokeLineCap(StrokeLineCap.ROUND);
            rect.setFill(Color.LIGHTBLUE.deriveColor(0, 1.2, 1, 0.6));

            group.addEventHandler(MouseEvent.MOUSE_PRESSED, onMousePressedEventHandler);
            group.addEventHandler(MouseEvent.MOUSE_DRAGGED, onMouseDraggedEventHandler);
            group.addEventHandler(MouseEvent.MOUSE_RELEASED, onMouseReleasedEventHandler);

        } 

}

rubberBandSelection = new RubberBandSelection(imageLayer);
Bounds selectionBounds = rubberBandSelection.getBounds();
int width = (int) bounds.getWidth();
int height = (int) bounds.getHeight();
int xPressed = (int)bounds.getMinX();
int yPressed = (int)bounds.getMinY();

0 ответов

Другие вопросы по тегам