Как изменить размер холста, содержащего отредактированный graphicsContext? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть холст и графический текст на нем.Я использую clearRect (), чтобы удалить несколько пикселей из изображения, загруженного на холст.Я должен иметь возможность увеличивать и уменьшать масштаб и панорамировать мое изображение.Я поместил свой холст в область прокрутки, чтобы я мог перемещаться по нему.Мне нужно уметь масштабировать с помощью прокрутки мыши.

Я пытался изменить размер холста, но при этом мне пришлось перерисовывать изображение, чтобы изменения были потеряны!

FXML:

<ScrollPane pannable="true" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: green;" BorderPane.alignment="CENTER">
    <content>
        <Canvas fx:id="imageCanvas" height="425.0" width="564.0">
            <cursor>
                <Cursor fx:constant="OPEN_HAND" />
            </cursor>
        </Canvas>
    </content>
</ScrollPane>

Контроллер:

imageCanvas.addEventHandler(MouseEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                if (e.getButton() == MouseButton.PRIMARY) {
                    System.out.println(e.getX() + "  " + e.getY());
                    gc.drawImage(
                            source,
                            (e.getX() - 25) * source.getWidth() / imageCanvas.getWidth(),
                            (e.getY() - 25) * source.getHeight() / imageCanvas.getHeight(),
                            50 * source.getWidth() / imageCanvas.getWidth(),
                            50 * source.getHeight() / imageCanvas.getHeight(),
                            e.getX() - 25,
                            e.getY() - 25,
                            50,
                            50
                    );
                } else if (e.getButton() == MouseButton.SECONDARY) {
                    gc.clearRect(e.getX() - 50, e.getY() - 50, 100, 100);
                }
            }
        });
...