Изменить размер или повернуть изображения на холсте JavaFX - PullRequest
0 голосов
/ 18 марта 2019

Я изо всех сил пытаюсь найти способ выбрать, а затем повернуть или изменить размеры геометрических фигур, нарисованных на холсте (используя функцию GraphicsContext), эта функция должна быть частью приложения, такого как MS Paint. Для рисования фигур я использую многоуровневую систему Canvas, чтобы разрешить функцию Undo / Redo. Моя первоначальная идея заключалась в том, чтобы использовать функцию моментального снимка для выполнения этой операции, но я не совсем уверен, как реализовать ее и является ли наилучшим способом сделать это.

UPDATE: Я сейчас работаю над этим кодом

public class Sandbox extends Application {

@Override
public void start(Stage primaryStage) {

    AnchorPane pane = new AnchorPane();

    Scene scene = new Scene(pane, 600, 400);

    Canvas canvas = new Canvas(600, 400);
    GraphicsContext gc = canvas.getGraphicsContext2D();

    gc.strokeOval(20, 20, 100, 150);
    gc.setStroke(Color.BLACK);
    pane.getChildren().add(canvas);

    primaryStage.setTitle("Prova");
    primaryStage.setScene(scene);
    primaryStage.show();

    ImageView imageView = new ImageView();

    canvas.setOnMousePressed(event -> {
        int x1 = (int) event.getX();
        int y1 = (int) event.getX();


        canvas.setOnMouseReleased(e -> {

            int x2 = (int) e.getX();
            int y2 = (int) e.getY();

            Rectangle2D rect = new Rectangle2D(x1, y1, x2, y2);

            SnapshotParameters params = new SnapshotParameters();
            params.setViewport(rect);
            params.setTransform(new Scale(0.5, 0.5));
            WritableImage write = new WritableImage(x1 + x2, y1 + y2);
            Image image = canvas.snapshot(params, write);
            imageView.setImage(image);
            gc.clearRect(x1, y1, x2, y2);
            gc.drawImage(image, x1, y1);
        });
    });

}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}}

Из этого в качестве начальной точки есть способ:

  1. Сделать выбор без немедленного выполнения преобразования
  2. Способ выделения выделения
...