2016-09-02 2 views
0

scene shape objects 또는 그림을 JavaFx Canvas (jdk, 타사 라이브러리, 샘플 코드 등)에서 사용할 때 .Net HatchStyles과 비슷한 것이 있습니까?JavaFx에서 HatchStyles (C# .Net과 비슷한 것)를 만듭니다.

내가 현재 생각할 수있는 유일한 해결책은 그 .net hatchstyles의 이미지 스크린 샷을 통해 만들어진 ImagePattern입니다. 닷넷 해치 스타일의

GraphicsContext gc = canvas.getGraphicsContext2D(); 
ImagePattern pattern = new ImagePattern(new Image("dotnet-pattern.png"); 
gc.setFill(pattern); 

그래픽 표현 : enter image description here

+0

결과 [' LinearGradient's (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/paint/LinearGradient.html)가 작동 할 수 있습니다. AFAIK (나는 ​​C#에 대해 아무것도 모른다.) 직접적인 상응하는 것이 없다. 'ImagePattern'에 대한 참고 사항으로'WritableImage' 또는''snapshot' (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/)로 기본'Image'를 만들 수도 있습니다. Node.html # snapshot-javafx.scene.SnapshotParameters-javafx.scene.image.WritableImage-), 예를 들어,'Shape' 인스턴스를 포함하는'Pane '. –

+2

JPG는 손실이 크기 때문에이 작업을 수행하는 데 가장 적합한 이미지 형식이 아닙니다. 이 방법을 사용한다면'.png's를 사용하는 것이 낫습니다. 덕분에 – fabian

답변

2

한 가지 방법은 당신이 어떤 제안을 약간 수정 될 것이다 : 기본 이미지에 대한 ImagePattern하지만 snapshot 적절한 노드를 사용합니다. 실제로 HatchStyle의 모양을 모른 채

, 다음에 변화가 일 수 있습니다

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.image.Image; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.scene.paint.ImagePattern; 
import javafx.scene.shape.Line; 
import javafx.scene.shape.StrokeLineCap; 
import javafx.stage.Stage; 

public class HatchStyleCanvas extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Image hatch = createHatch(); 
     ImagePattern pattern = new ImagePattern(hatch, 0, 0, 20, 20, false);   
     Canvas canvas = new Canvas(600, 600); 
     GraphicsContext gc = canvas.getGraphicsContext2D(); 
     gc.setFill(pattern); 
     gc.fillRect(0, 0, 600, 600); 
     primaryStage.setScene(new Scene(new StackPane(canvas))); 
     primaryStage.show(); 
    } 

    private Image createHatch() { 
     Pane pane = new Pane(); 
     pane.setPrefSize(20, 20); 
     Line fw = new Line(-5, -5, 25, 25); 
     Line bw = new Line(-5, 25, 25, -5); 
     fw.setStroke(Color.ALICEBLUE); 
     bw.setStroke(Color.ALICEBLUE); 
     fw.setStrokeWidth(5); 
     bw.setStrokeWidth(5); 
     pane.getChildren().addAll(fw, bw); 
     new Scene(pane); 
     return pane.snapshot(null, null); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

이것은 당신의 영리한 사용, 필요에 따라

enter image description here

+0

! 스크린 샷을 사용하는 것보다 훨씬 낫습니다. 더 좋은 해결책이 없다고 생각합니다. 닷넷 코드를 디 컴파일하여 HatchSytles를 그리는 데 GDI +를 사용함을 알았습니다. 따라서 코드를 포팅하는 것조차 옵션이 아닙니다. – Omid