JavaFX GraphicsContext倒置圆

时间:2017-01-13 04:13:28

标签: java javafx graphics graphicscontext

我一直试图在网上找到一种方法,但我找不到任何东西。

我想用JavaFX GraphicsContext绘制一个“反向圆圈”。 这些图像展示了我想要的东西。

原件: original picture

使用“Inverted Circle”(我想画的内容): with inverted circle

在图像编辑器中,我可以删除新图层中的圆形区域...我没有看到任何可以在GraphicsContext中执行此操作的函数。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

我不太确定直接使用GraphicsContext,但你可以使用Blending来完成。

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);

答案 1 :(得分:1)

构建圆形路径并在绘制图像时将其用作剪辑:

@Override
public void start(Stage primaryStage) {
    Image image = new Image("https://i.stack.imgur.com/zEoW1.jpg");
    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();
}