VECTORISER DU TEXTE

TITOMBOSS Messages postés 50 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 6 juillet 2007 - 7 janv. 2006 à 15:08
TITOMBOSS Messages postés 50 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 6 juillet 2007 - 14 janv. 2006 à 00:20
Bonjour, je voulais savoir comment pourait-on vectoriser un texte, de n'importe quelle police. en fait j'aimerait traduite le contour de chaque lettre en courbes et lignes... Ce serait pour faire un petit programme qui crérait un programme ISO ( pour une fraisseuse à commande numérique de mon lycée.) les programmes ISO sont des suite de coordonées, des modes de déplacement. mon projet est de faire un programme qui autommatiserait le découpage de ses lettre dans des plaques de métal.(Linéaires, courbes, circulaire...); cela me servirait aussi a faire un controle Label redimentionable (pour étirer les lettres par exemple juste en hauteur ou en largeur...)

5 réponses

jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 1
7 janv. 2006 à 16:52
salut !
Je ne crois pas qu'il existe des trucs tous faits avec ces choses la.


je pense que le mieux c'est de choisir ("à la main") une police qui a l'air la plus "carrée", la plus simple possible, puis de regarder les coordonnées des lignes avec Paint.


Tu notes pour chaque lettre les coordonnées de départ et d'arrivée, et comme ca pour étirer ou ... tu n'auras qu'a multiplier les coordonnées x ou y par un facteur bien choisi.


C'est en tout cas ce que j'ai fait la semaine dernière pour un truc ou j'avais besoin de dessiner une étoile pleine et de la redimensionner en x et y.

un conseil : scalemode = pixel

ex pour un triangle plein :l largeur du rectangle en pixels, h hauteur, a et b : coordonnées x et y de l'emplacement du traingle sur la picturebox p (en haut à gauche)

For k = a To (a + l)
yy = Abs((k - (a + l / 2))) / (l / 2) * h
p.Line (k, b + yy)-(k, b + h), vbBlack
Next k

pour l'étoile (pleine, à 5 branches)
aa = CInt((3 * l / 13))


For k = aa To CInt((l / 2))
yy = h - (24 / 7) * (k - aa) * (h / l)
zz = h - (5 / 7) * (k - aa) * (h / l)
p.Line (a + k, b + yy)-(a + k, b + zz), vbRed
p.Line (a + l - k, b + yy)-(a + l - k, b + zz), vbRed
Next k


aa = CInt(((3 / 8) * h))


For k = 1 To CInt((l / 2))
yy = aa + CCur(0.75 * (k - 1) * (h / l))
p.Line (a + k, b + aa)-(a + k, b + yy), vbRed
p.Line (a + l - k, b + aa)-(a + l - k, b + yy), vbRed
Next k



Apres ca peut etre intéressant de faire un prog qui reconnait les lignes dans une image bitmap donnée mais si tu veux un truc rapidement, fait ca à la main, ca ira vite (il n'y a que 26 lettres !)



Bon courage


Thomas.
0
TITOMBOSS Messages postés 50 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 6 juillet 2007
7 janv. 2006 à 19:54
Merci jannoman mais en fait je voulais que mon programme marche pour toutes les police, donc répertorier charque lettre de chaque police, sa fait un pe plus de 26 lettres LOL, mais ton idée de redimentionnement n'est pas mal du tout Merci encor, je vais essayer de programmer une routine qui reconaitra les contour de mon texte, mais je crois que sa étre un peu compliqué, si quelq'un a une meilleur idée...
Je suis déjà parvenue a reconaitre touts les points de chaques contours, mais il me faudrait une astuce pour les transformer en lignes et courbes, je ne peut pas garder tout les points, c'est beaucoup trop lourd pour la fraiseuse...
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
7 janv. 2006 à 21:34
Hum... Tu sais, en fait, les polices d'écritures (enfin, pas toutes mais la grande majorité) sont vectorielles !!! Autrement dit, elles sont bel et bien constituées de points et de courbes!

Il faut déjà savoir qu'il y a plein de formats différents (TrueType, Typ1, OpenType, PostScript, ..., ..., ...) Tout le monde y va de sa petite graine. Les TrueType de Crosoft sont les plus nombreuses (cf. www.dafont.com et co). Elles ne sont pas évidente à comprendre... Il n'existe que quelques softs pour les créer (cf. "Font Creator 5.0" de High-Logic par exemple). Les polices d'écriture c'est compliqué parce qu'il y a plusieurs caractères...

Si tu tiens vraiment à faire ça, moi je te conseil de te renseigner sérieusement sur le net concernant le format (cf. ISO et RFCs). Truetype doit bien avoir été standardisé... Mais je te préviens, il n'y a rien de plus difficile à trouver que les formats des fichiers (surtout pour les non anglophones!).
Si tu trouves et que tu te lance dans l'avanture, pense à nous faire un ptit tutorial hein ;-)

Parce qu'en effet, à part en piochant toutes ces données directement dans la police, je ne vois pas trop d'autres solutions possibles! Il faut donc connaître parfaitement le format de ces fichiers...

L'autre solution que je peux te proposer c'est d'écrire ce que tu dois écrire en grand (très grand pour plus de précision), lettre par lettre, noir sur blanc (lettres remplies donc). Ensuite, avec une routine proche de celle du flooding (remplissage [cf. ma source "Pot de Peinture"]), tu récupères la matrice des pixels de bordure ce qui te donnera donc une matrice (tableau unidimensionnel il va sans dire !) des points du contour. Reste plus qu'a tracer des lignes entre chaque point et pi le tour est joué!

Alors, évidemment, il faut un sacré paquet de points pour obtenir de belles courbes puisqu'elles seront faites via des lignes...

Sinon, tu peux encore utiliser les courbes de bézier (?orthographe?) mais alors pour les récupérer, c'est pas gagné!!!

Sinon, faut faire preuve d'imagination et employer quelques techniques de base d'IA. Tu peux éventuellement te baser sur cette source (http://www.vbfrance.com/article.aspx?ID=10193). En somme, tu peux considérer qu'il n'existe que deux types de formes : les lignes et les cercles. Le problème étant de trouver, pour une courbe, le centre du cercle et son rapportXY. Mais bon, le plus dur est de trouver un moyen d'analiser le contour pour différencier les lignes des courbes/cercles. Pas facile tout ça...

Sinon, y'a encore peut-être un moyen, mais là, faudra reposer une question sur le forum... En effet, sur VBFrance y'a de sacrées brutes en maths et j'ai vu une source qui permettait de "lisser" une courbe... Autrement dit, de détecter, via 3 points vectoriels (ceux de ton contour pixelique <strike>quitte à en réduire le nombre au niveau matriciel</strike>...), la courbure...
Je pense que cette solution est la meilleur.
Donc, pour résumer, il faudrait faire :
- Dessin des lettres (petites pour avoir moins de points... Mode de réduction le meilleur!).
- Récupération des points du contour dans une matrice unidimensionnelle
- Extrapolation des courbes via l'application de l'équation matheuse issue de ton prochain poste sur ce forum
- Transformer le tout en ISO (que je ne connais pas).

Reste évidemment à savoir comment traduire les courbes dans ton format...

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 janv. 2006 à 04:10
Salut
Héhé ! J'ai trouvé ton bonheur clique ici
C'est en anglais, mais ça fait ce que tu cherches.
Dans l'application exemple, il faut cliquer sur le carré vide pour faire apparaitre les lettres évidées (j'ai cherché un moment avant de trouver, lol)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TITOMBOSS Messages postés 50 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 6 juillet 2007
14 janv. 2006 à 00:20
Merci ScSami pour cette réponce plus que complette. Je suis enterin de rechercher comment transformé des points en courbe, c'est vrément pas simple, surtout pour mon petit niveau de seconde!!! je n'ais finalement aps beaucoup de temps pour chercher des solutions pour décripter les formats de polices. Mais je pense que se doit être vrément interesant, Je vais essayer de m'y intereser d'avantage. Mais je suis un peu décourager car je sait que des logiciel déjà touts fait font exactement ça.

Bonsoir
0
Rejoignez-nous