2016-09-02 14 views
0

scene shape objectsや図をJavaFx Canvas(jdk、サードパーティのライブラリ、サンプルコードなど)で使用しているときに図形を塗りつぶすために.Net HatchStylesと似ていますか?JavaFxはHatchStyles(C#.Netのようなもの)を作成します

私が現在考えることのできる唯一の解決策は、ImagePatternを使用して、それらの.netハッチスタイルの画像スクリーンショットを作成することです。ネットハッチスタイルの

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'を作成することもできます。例えばShapeインスタンスを含む 'Pane'のNode.html#snapshot-javafx.scene.SnapshotParameters-javafx.scene.image.WritableImage-)を参照してください。 –

+2

JPGは、これを行うには最高の画像フォーマットではありません。このアプローチを使用しているなら、 '.png'sを使うのが良いでしょう。 – fabian

答えて

2

一つのアプローチは、あなたが提案するものの若干の変更次のようになります。下にある画像のためImagePatternが、snapshot適切なノードを使用します。実際HatchStyle sがどのように見えるかを知らず

、以下のバリエーションがうまくいくかもしれない:

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

ありがとう!スクリーンショットを使用するよりもはるかに優れています。私は、.NETコードを逆コンパイルし、HatchSytlesをペイントするためにGDI +を使用することが分かったので、コードを移植することもオプションではありません。 – Omid

関連する問題