Мне нужна функция.

import javafx.scene.image.Image;

private Image cropImage(Image image) {
    // Обрезать изображение до максимального круга или квадрата
    return Image;
}

Важно то, что я не хочу менять масштаб изображения, а хочу обрезать максимальный круг или квадрат в центре изображения. Я пытаюсь сделать это уже два дня. Не могли бы вы мне помочь?

Большое спасибо. Рене

wolei

Ответов: 2

Ответы (2)

Нечто вроде этого:

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Image img = new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Osias_Beert_the_Elder_-_Dishes_with_Oysters%2C_Fruit%2C_and_Wine_-_Google_Art_Project.jpg/350px-Osias_Beert_the_Elder_-_Dishes_with_Oysters%2C_Fruit%2C_and_Wine_-_Google_Art_Project.jpg");
        Image img2 = crop(img, false);
        Image img3 = crop(img, true);
        HBox box = new HBox(8, new ImageView(img),new ImageView(img2),new ImageView(img3));
        Scene scene = new Scene(box);
        stage.setScene(scene);
        stage.show();
    }

    private Image crop(Image img, boolean toCircle) {
        double d = Math.min(img.getWidth(),img.getHeight());
        double x = (d-img.getWidth())/2;
        double y = (d-img.getHeight())/2;
        Canvas canvas = new Canvas(d, d);
        GraphicsContext g = canvas.getGraphicsContext2D();
        if (toCircle) {
            g.fillOval(0, 0, d, d);
            g.setGlobalBlendMode(BlendMode.SRC_ATOP);
        }
        g.drawImage(img, x, y);
        return canvas.snapshot(null, null);
    }
}

Вы можете сделать это с помощью метода setClip ImageView.

2022 WebDevInsider