2017-03-02 3 views
1

Ich implementiere eine App zum Einfärben mit Swift 3.0. Ich bekomme einen CGContext von einem UIImageView und zeichne UIBezierPath darüber in UITouch Ereignisse Methoden - beginnen, verschieben und beendet -.iOS bekomme Schnittpunkt Pixel zwischen einem UIBezierPath und einem Bild

Wie kann ich die Schnittpixel zwischen dem Kontextbild und dem Pfad erhalten? Ich brauche alle Pixel nicht nur Kontrollpunkte des Pfades.

+0

Könnten Sie bitte Ihren Code und einen Screenshot hinzufügen? – Ocunidee

+0

Die Technik wird ähnlich der hier angegebenen sein: http://robnapier.net/clipping-cgrect-cgpath. In diesem Fall sollten Sie die Überblendung einschließen. Zeichnen Sie Ihr Bild in einen Graustufen-Kontext. Gehe durch den Kontext und mache jedes Pixel, das nicht schwarz ist, reinweiß. Dann zeichnen Sie Ihre Kurve in Schwarz, mit Blending. Gehe dann durch und finde jedes Pixel, das nicht genau weiß oder genau schwarz ist. Das sind die Überschneidungen. Ich kann den Code dafür in Swift jetzt nicht schreiben, aber es sollte dich auf die richtige Spur bringen. –

Antwort

0

Ich nehme an, dass Sie den Bezier-Pfad glätten und Kurven hinzufügen, während der Benutzer zeichnet und nicht nur Liniensegmente verwendet? Sonst könnten Sie einfach die Punkte entlang der Geraden zwischen jedem Berührungspunkt berechnen.

Wenn Sie im UIBezierPath gekrümmte Elemente verwenden, können Sie die Punkte entlang dieses Pfades mithilfe meiner Bibliothek ClippingBezier abrufen. Der Code würde in etwa so aussehen:

for(NSInteger px = 0; px < [userDrawnPath length]; px++){ 
    CGPoint pointAlongPath = [[userDrawnPath bezierPathByTrimmingToLength:px] lastPoint]; 
} 

Es ist schnell, aber Sie sollten wahrscheinlich die Ergebnisse zwischenspeichern, wenn der Benutzer so zieht, dass Sie nicht jedes Pixel der Benutzer jedes Mal neu Berechnen eines neuen Berührungspunkt hinzufügt.

Verwandte Themen