JavaFX图形上下文倒置圆形

3

我一直在尝试在线找到一种方法来做这件事,但是我没有找到任何处理方法。

我想使用JavaFX GraphicsContext绘制一个“反向圆”,以下图片展示了我的需求:

原始图片: original picture

带有“反向圆”的图像(我想要绘制的): with inverted circle

在图像编辑器中,我只需要在新图层中擦除圆形区域... 但我没有看到GraphicsContext中会执行此操作的功能。

我需要能够选择此“圆”的中心点和半径。

谢谢!

2个回答

1

我不太确定直接使用 GraphicsContext,但你可以使用混合来实现。

ImageView image; // Your image
Circle mask = new Circle();

Group g = new Group();
g.setBlendMode(BlendMode.SRC_ATOP);
g.getChildren.add(image);
g.getChildren.add(mask);

我本来想用这个的,但不幸的是我正在制作一个游戏,所以我要使用Canvas。 - MCMastery
@MCMastery Fabian的方法可能更受欢迎,但是GraphicsContext也支持BlendMode。如果你没有解决方案,可以看一下这个。 - Jai

1
构建一个圆形路径并将其用作剪辑,绘制图像时使用它:
@Override
public void start(Stage primaryStage) {
    Image image = new Image("https://istack.dev59.com/zEoW1.webp");
    double w = image.getWidth();
    double h = image.getHeight();

    Canvas canvas = new Canvas(w, h);
    GraphicsContext gc = canvas.getGraphicsContext2D();

    // draw background
    gc.setFill(Color.BLACK);
    gc.fillRect(0, 0, w, h);

    double r = Math.min(h, w) * 2 / 5;
    double cx = w / 2;
    double cy = h / 2;

    // create circular path
    gc.beginPath();
    gc.moveTo(cx - r, cy); // to first point on the circle
    gc.arc(cx, cy, r, r, 180, 360);
    gc.closePath();

    gc.clip();

    gc.drawImage(image, 0, 0);

    StackPane root = new StackPane();
    root.getChildren().add(canvas);

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}

这看起来没问题,似乎应该可以工作...我会找出我做错了什么。 - MCMastery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接