2016-06-01 16 views
1

私は、Inkscapeのベジェツールとよく似たJavaプログラムを持っています。私のプログラムの目的は、ユーザーがカーブを使用してオブジェクトの周りのパス(人の頭のように)を描き、囲まれたカーブ内のピクセルを抽出(コピー)できるようにすることです。添付の図では、閉じた領域を形成する3つの青い曲線があることがわかります。私はこれらの3つの曲線で囲まれた領域をコピーする方法を知りたいですか? enter image description hereキューブカーブで囲まれたイメージの領域をコピーする方法

私は曲線(私は赤の接線と簡略化のために赤いコントロールポイントを省略)を描画するために使用するコード:

 cubicCurve1 = new CubicCurve2D.Double(
      p1.x, p1.y, 
      p1Control1.x, p1Control1.y, 
      p2Control1.x, p2Control1.y, 
      p2.x, p2.y); 

     cubicCurve2 = new CubicCurve2D.Double(
      p2.x, p2.y, 
      p2Control2.x, p2Control2.y, 
      p3Control1.x, p3Control1.y, 
      p3.x, p3.y); 

     cubicCurve3 = new CubicCurve2D.Double(
       p3.x, p3.y, 
       p3Control2.x, p3Control2.y, 
       p1Control1.x, p1Control1.y, 
       p1.x, p1.y); 

     g2D.setPaint(Color.BLUE); 
    g2D.draw(cubicCurve1);  
    g2D.draw(cubicCurve2); 
    g2D.draw(cubicCurve3); 
+0

の場合曲線を使用してポリゴン塗りを行うと、ポリゴンはコピーする必要がある領域を定義します。 –

+0

私はJavaに新しいので、このダミーの質問には申し訳ありません:あなたの提案をコードで表示してもらえますか?私は見ましたが、私にその領域を返すPolygonクラスの関数を見つけることができませんでした。 –

+0

"あなたの曲線を使ってポリゴンを塗りつぶした場合、ポリゴンはコピーする必要がある領域を定義します":balotonyの多くは – gpasch

答えて

1

をここに私は私の問題を解決する方法は次のとおりです。

 GeneralPath shape = new GeneralPath(); 
     shape.moveTo(cubicCurve1.x1, cubicCurve1.y1); 
     shape.curveTo(cubicCurve1.ctrlx1, cubicCurve1.ctrly1, cubicCurve1.ctrlx2, cubicCurve1.ctrly2, cubicCurve1.x2, cubicCurve1.y2); 
     shape.curveTo(cubicCurve2.ctrlx1, cubicCurve2.ctrly1, cubicCurve2.ctrlx2, cubicCurve2.ctrly2, cubicCurve2.x2, cubicCurve2.y2); 
     shape.curveTo(cubicCurve3.ctrlx1, cubicCurve3.ctrly1, cubicCurve3.ctrlx2, cubicCurve3.ctrly2, cubicCurve1.x1, cubicCurve1.y1); 
     g2D.draw(shape); 
     g2D.setClip(shape); 

     // Draw an image 

     g2D.drawImage(image, 0, 0, this); 
+0

あなた自身で問題を解決できてうれしいです。私は助けをされたJavaを十分に知らない。 –

+0

Mark Ransomに感謝します。あなたは私の解決策を見つけるために私を導いてくれました。再度、感謝します –

関連する問題