我一直在尝试找到一种在线执行此操作的方法,但我找不到任何东西。
我想用 JavaFX GraphicsContext 画一个“反圆”。这些图像显示了我想要的。
在图像编辑器中,我可以擦除新图层中的圆形区域......我在 GraphicsContext 中看不到任何可以做到这一点的函数。
我需要能够选择这个“圆”的中心点和半径。
谢谢!
我一直在尝试找到一种在线执行此操作的方法,但我找不到任何东西。
我想用 JavaFX GraphicsContext 画一个“反圆”。这些图像显示了我想要的。
在图像编辑器中,我可以擦除新图层中的圆形区域......我在 GraphicsContext 中看不到任何可以做到这一点的函数。
我需要能够选择这个“圆”的中心点和半径。
谢谢!
我不太确定直接使用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);
构造一个圆形路径,并在绘制图像时将其用作剪辑:
@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();
}