有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从GraphicsContext中删除剪辑

这可能是有史以来最简单的问题。我有一个如下的JavaFx Canvas设置:

    Canvas canvas = new Canvas(300, 300);
    GraphicsContext context = canvas.getGraphicsContext2D();

    // make a big rectangle
    context.setFill(Color.BLUE);
    context.fillRect(50, 50, 200, 200);

    // clip
    context.beginPath();
    context.rect(100, 100, 100, 100);
    context.closePath();
    context.clip();

    // so now this draws a clipped smaller rectangle
    context.setFill(Color.RED);
    context.fillRect(50, 50, 200, 200);

    context.removeClip(); // ???

    // remove clip so this white rectangle is shown
    context.setStroke(Color.WHITE);
    context.setLineWidth(3);
    context.strokeRect(75, 75, 150, 150);

我尝试了GraphicsContext#restore()(它恢复了除剪辑之外的所有内容,并创建了一个从0 | 0开始的矩形路径,具有画布的大小,然后再次调用^{

如何从GraphicsContext中删除剪辑


共 (1) 个答案

  1. # 1 楼答案

    JavaFX中的剪切行为很难说。“你说什么?”这个怎么样

    public void start(Stage primaryStage) throws Exception {
        Pane root = new Pane();
        Canvas canvas = new Canvas();
        canvas.setHeight(400);
        canvas.setWidth(400);
    
        GraphicsContext graphics = canvas.getGraphicsContext2D();
        //graphics.save();
        graphics.beginPath();
        graphics.rect(0,0,200,200);
        graphics.clip();
        graphics.setFill(Color.RED);
        graphics.fillOval(100, 100, 200, 200);
    
        //graphics.restore();
        graphics.beginPath();
        graphics.rect(200,200,200,200);
        graphics.clip();
    
        graphics.setFill(Color.BLUE);
        graphics.fillOval(100, 100, 200, 200);
    
        root.getChildren().add(canvas);
        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    

    当我在电脑上这样做时,我只得到一个蓝色的圆圈。没有剪辑。有人可能会想到红色的四分之一圆和蓝色的四分之一圆。不。取消对save和restore调用的注释,它的行为符合预期