2016-06-01 10 views
1

Ich habe ein Java-Programm, das dem Bezier-Werkzeug in Inkscape sehr ähnlich ist. Der Zweck meines Programms ist es, dem Benutzer zu ermöglichen, die Kurven zu verwenden, um einen Pfad um ein Objekt (wie den Kopf einer Person) zu zeichnen und dann die Pixel innerhalb der eingeschlossenen Kurven zu extrahieren (kopieren). Im angehängten Bild sehen Sie, dass es drei blaue Kurven gibt, die einen geschlossenen Bereich bilden. Ich würde gerne wissen, wie man den von diesen 3 Kurven eingeschlossenen Bereich kopiert? enter image description hereSo kopieren Sie einen Bereich eines Bildes, der von kubischen Kurven eingeschlossen ist

Der Code, den ich die Kurven zeichnen verwenden (ich die roten Tangenten und die roten Kontrollpunkte der Einfachheit halber weggelassen):

 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

Wenn Wenn Sie eine Polygonfüllung mit Ihrer Kurve durchführen, definiert das Polygon den Bereich, den Sie kopieren müssen. –

+0

Entschuldigung für diese Dummy-Frage, da ich neu in Java bin: Würden Sie mir bitte Ihren Vorschlag im Code zeigen? Ich habe gesucht, konnte aber keine Funktion der Klasse Polygon finden, die mir den Bereich zurückgeben würde. –

+0

"Wenn Sie eine Polygonfüllung mit Ihrer Kurve machen, wird das Polygon den Bereich definieren, den Sie kopieren müssen": viel balooney – gpasch

Antwort

1

Hier ist, wie ich mein Problem gelöst:

 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

Ich bin froh, dass Sie das Problem selbst lösen konnten. Ich kenne Java nicht genug um Hilfe zu haben. –

+0

danke Mark Ransom. Dein Vorschlag hat mich dazu gebracht, meine Lösung zu finden. Danke noch einmal –