import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.geometry.Rectangle2D; import javafx.geometry.VPos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.effect.DropShadow; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.RowConstraints; import javafx.scene.paint.Color; import javafx.stage.Stage; public class BildManipulieren extends Application { @Override public void start(Stage primaryStage) { Image image = new Image("img/wien.jpg"); ImageView imgView = new ImageView(image); imgView.setEffect(new DropShadow(20, Color.BLACK)); Button rotButt = new Button("drehen"); rotButt.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { imgView.setRotate(imgView.getRotate() + 90); } }); Button scaleButt = new Button("skalieren"); scaleButt.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { scale(imgView, 200); } }); Button clipButt = new Button("beschneiden"); clipButt.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { clip(imgView); } }); Button resetButt = new Button("reset"); resetButt.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { reset(imgView); } }); HBox buttBox = new HBox(5); buttBox.getChildren().addAll(rotButt, scaleButt, clipButt, resetButt); buttBox.setPadding(new Insets(.5)); buttBox.setAlignment(Pos.CENTER); GridPane grid = new GridPane(); grid.add(imgView, 0, 0); grid.add(buttBox, 0, 1); grid.setGridLinesVisible(false); GridPane.setHalignment(imgView, HPos.CENTER); GridPane.setValignment(imgView, VPos.CENTER); RowConstraints row1 = new RowConstraints(); row1.setVgrow(Priority.ALWAYS); grid.getRowConstraints().add(row1); ColumnConstraints col1 = new ColumnConstraints(); col1.setPercentWidth(100); grid.getColumnConstraints().add(col1); Scene scene = new Scene(grid, Color.RED); primaryStage.setTitle("ImageView Beispiel"); primaryStage.setScene(scene); primaryStage.sizeToScene(); primaryStage.show(); } private void scale(ImageView view, double trans) { Image img = view.getImage(); if (img == null) return; double imgW = view.getFitWidth() > 0 ? view.getFitWidth() : img.getWidth(); double imgH = view.getFitHeight() > 0 ? view.getFitHeight() : img.getHeight(); double deltaX = img.getWidth() / trans; double deltaY = img.getHeight() / trans; double delta = deltaX >= deltaY ? deltaX : deltaY; double newW = imgW / delta; double newH = imgH / delta; double oldW = view.getFitWidth(); double oldH = view.getFitHeight(); view.setFitWidth(newW); view.setFitHeight(newH); view.setPreserveRatio(true); view.setX((oldW - newW) / 2); view.setY((oldH - newH) / -2); } private void clip(ImageView view) { Rectangle2D rect = new Rectangle2D(50, 50, 200, 200); view.setViewport(rect); } private void reset(ImageView view) { Image img = view.getImage(); view.setRotate(0); view.setFitWidth(img.getWidth()); view.setFitHeight(img.getHeight()); view.setPreserveRatio(true); view.setViewport(null); } public static void main(String[] args) { Application.launch(args); } }