【问题标题】:JavaFX GraphicsContext Inverted CircleJavaFX GraphicsContext 倒圆
【发布时间】:2017-01-13 04:13:27
【问题描述】:

我一直在尝试找到一种在线执行此操作的方法,但我找不到任何东西。

我想用 JavaFX GraphicsContext 画一个“反圆”。 这些图片展示了我想要的。

原文:

用“倒圆”(我想画的):

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

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

谢谢!

【问题讨论】:

    标签: java javafx graphics graphicscontext


    【解决方案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);
    

    【讨论】:

    • 我会用这个,但不幸的是我正在制作游戏,所以我使用的是 Canvas
    • @MCMastery Fabian 的方式可能是首选,但GraphicsContext 也支持BlendMode。如果你没有解决方案,你可以看看那个。
    【解决方案2】:

    构造一个圆形路径,在绘制图像时作为剪辑使用:

    @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();
    }
    

    【讨论】:

    • 这看起来不错,似乎应该可以工作......我会弄清楚我做错了什么
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多