java - 从 GraphicsContext 中删除剪裁

标签 java javafx

这可能是有史以来最简单的问题。我有一个像这样的 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 开始并具有 Canvas 大小的矩形路径并调用 clip() 再次。

如何从 GraphicsContext 中删除剪裁?

最佳答案

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

当我在计算机上执行此操作时,我只会看到一个蓝色圆圈。没有剪辑。有人可能会期望有一个红色的四分之一圆和一个蓝色的四分之一圆。没有。取消注释保存和恢复调用,它的行为符合预期。

关于java - 从 GraphicsContext 中删除剪裁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36388042/

相关文章:

java - 对 URL 使用正则表达式

c# - 从 C# 调用的 Selenium Java 进程在 CCNET 构建服务器上无法正常启动

java - 无法在单独的类中添加到根?

java - Nexus 7 平板电脑在 Eclipse 中未显示在 "Android Device Chooser"上

java:如何将1种形式的1个变量的值获取到另一种形式

java - 去除List中重复项的方法

java - Java中如何将值从一个类传递到另一个类?

java - 将数据动态添加到 LineChart JavaFX

JavaFX - 设置 LocalDateTime 的方法不起作用

JavaFx - 在警告对话框中包装内容文本