2011-09-21 4 views
0

Nous avons actuellement une image dynamique qui contient le texte créé à partir de l'entrée de l'utilisateur. Ce texte suit une courbe de Bézier pour définir sa position et sa rotation.Positionner des images le long d'une courbe de Bézier

Pour diverses raisons, le texte doit être modifié pour être un ensemble d'images car la police doit être très spécifique. Nous aurons donc un PNG pour chaque caractère autorisé de l'alphabet. Donc, si l'utilisateur entre le mot "TEST", le système va retirer les lettres T, E, S et T et les positionner l'une à côté de l'autre. Cette partie n'est pas un problème. Le problème consiste à forcer chacune des images à suivre la même courbe de Bézier que le texte en utilisant graphics.DrawString. Les images doivent être positionnées correctement et, idéalement, doivent également être pivotées correctement. Est-ce possible, et comment cela a-t-il pu être fait?

Répondre

1

La réponse rapide est que vous "tout simplement"

  • paramétriser la courbe de Bézier uniformément (PDF on math) (Explanation of what is wrong with standard parametrisation)
  • calculer les Normales à la courbe
  • organiser vos images le long de la courbe selon le paramétrage pair en utilisant les largeurs de glyphe comme la distance de paramètre
  • faites pivoter vos images de sorte que "up" pour votre image est la direction normale à la courbe

Mais même cela n'obtient pas une assez bonne image. Habituellement, vous devez appliquer une transformation non linéaire à chaque image de sorte que les parties éloignées de la courbe aient une largeur différente de celle de la courbe, en fonction de la courbure et de la convexité.

This site explains many of the details by decomposing the outline of an image in paths

Cependant, comme les liens précédents, je suis sûr de montrer début, c'est un processus de calcul intensif. Au lieu de cela, il vous sera peut-être plus facile de simplement convertir vos images en polices et d'utiliser la méthode que vous utilisiez précédemment. Cette solution reposerait sur un outil tiers pour faire la conversion, et j'hésite à faire des suggestions. Une direction, cependant, (de beaucoup) serait d'utiliser un outil graphique raster-to-vector comme l'open source Inkscape et de créer vos polices à partir de la sortie de graphiques vectoriels. Cette méthode évolue au mieux, mais peut impliquer une étape distincte de conversion de la sortie vers un format de police préféré comme True-Type.

+0

Je ne pense pas que je pourrais utiliser une police, car parfois une lettre pourrait avoir une icône différente. C'est pourquoi nous avons choisi d'utiliser une série d'images. Connaissez-vous des exemples de code qui pourraient faire ce que je cherche peut-être? – ajbrun

Questions connexes