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