2017-01-13 8 views
2

저는 온라인에서이 작업을 수행하는 방법을 찾고 있었지만 아무것도 찾을 수 없었습니다.JavaFX GraphicsContext Inverted Circle

"역원"을 JavaFX GraphicsContext와 함께 그려야합니다. 이 이미지들은 내가 원하는 것을 보여줍니다.

원본 : "거꾸로 서클"(내가 그리려는 무엇)와 original picture

: 난 그냥 새 레이어에 원 영역을 지울 수있는 이미지 편집기에서 with inverted circle

... I GraphicsContext에서 기능을 수행 할 수있는 기능이 보이지 않습니다.

이 "원"의 중심점과 반경을 선택할 수 있어야합니다.

감사합니다.

답변

1

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); 
+0

내가 이것을 사용합니다,하지만 불행히도 나는 게임을하고, 그래서 캔버스 – MCMastery

+0

@MCMastery을 사용하고 있습니다 Fabian의 방법이 선호되지만 GraphicsContext는 [BlendMode]를 지원합니다 (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html#setGlobalBlendMode-javafx.scene.effect .BlendMode-). 당신이 해결책을 찾지 못했다면, 당신은 그것을 살펴볼 수 있습니다. – Jai

1

원형 경로를 구축하고 이미지를 그릴 때 클립으로 사용 :

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

이것은 올바르게 보이고 작동해야하는 것처럼 보입니다 ... 내가 뭘 잘못하고 있는지 알아낼 것입니다. – MCMastery