2017-03-02 4 views
1

J'applique une application pour colorier en utilisant Swift 3.0. Je reçois un CGContext d'un UIImageView et dessine UIBezierPath au-dessus dans UITouch méthodes d'événements - commencer, se déplacer et terminé -.iOS obtient des pixels d'intersection entre un UIBezierPath et une image

Comment puis-je obtenir les pixels d'intersection entre l'image de contexte et le chemin tracé? Je dois obtenir tous les pixels non seulement les points de contrôle du chemin.

+0

pourriez-vous ajouter votre code s'il vous plaît et une capture d'écran? – Ocunidee

+0

La technique sera similaire à celle donnée ici: http://robnapier.net/clipping-cgrect-cgpath. Dans ce cas, vous devez inclure le mélange. Dessinez votre image dans un contexte de niveaux de gris. Parcourez le contexte et créez un pixel qui n'est pas noir, blanc pur. Puis dessinez votre courbe en noir, avec le mélange. Parcourez ensuite et trouvez tout pixel qui n'est pas exactement blanc ou exactement noir. Ce sont les chevauchements. Je ne peux pas écrire le code pour ça maintenant dans Swift, mais ça devrait vous mettre sur la bonne voie. –

Répondre

0

Je suppose que vous lissez le chemin Bézier et que vous ajoutez des courbes lorsque l'utilisateur dessine, et pas seulement en utilisant des segments de ligne. Sinon, vous pouvez simplement calculer les points le long des lignes droites entre chaque point de contact.

Si vous utilisez des éléments courbes dans UIBezierPath, vous pouvez obtenir les points le long de ce chemin en utilisant ma bibliothèque ClippingBezier. Le code ressemblerait à quelque chose comme:

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

Il est rapide, mais vous devriez probablement mettre en cache les résultats que l'utilisateur dessine de sorte que vous n'êtes pas recalculant chaque pixel à chaque fois que l'utilisateur ajoute un nouveau point de contact.