gpt4 book ai didi

java - 从 GraphicsContext 中删除剪裁

转载 作者:行者123 更新时间:2023-12-01 21:41:40 27 4
gpt4 key购买 nike

这可能是有史以来最简单的问题。我有一个像这样的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com