J'aimerais pouvoir extraire la géométrie pour chaque lettre d'un fichier de police TrueType. Chaque lettre aurait un ensemble de coordonnées, en supposant que chaque lettre est dans sa propre grille.Extraire la géométrie à partir de la police
Comme une image vaut mille mots - Je voudrais obtenir les sommets pour des lettres semblables à l'image ci-dessous (avec la permission de http://polymaps.org/)
Mise à jour
Merci à l'indice pour utiliser GDI, qui est maintenant incorporé dans .NET System.Drawing.Drawing2D J'ai obtenu le code suivant pour créer des polygones WKT. Aucune courbe de Bézier possible. Et même après que les lettres aient été retournées et tournées, certains chemins ne se rejoignaient pas correctement.
// C# Visual Studio
GraphicsPath gp = new GraphicsPath();
Point origin = new Point(0, 0);
StringFormat format = new StringFormat();
FontFamily ff = new FontFamily("Arial");
//enter letter here
gp.AddString("T", ff, 0, 12, origin, format); //ABCDEFGHIJKLMNOPQRSTUVWXYZ
StringBuilder sb = new StringBuilder();
sb.AppendLine("DECLARE @g geometry;");
sb.Append("SET @g = geometry::STGeomFromText('POLYGON ((");
Matrix flipmatrix = new Matrix(-1, 0, 0, 1, 0, 0);
gp.Transform(flipmatrix);
Matrix rotationtransform = new Matrix();
RectangleF r = gp.GetBounds();
// Get center point
PointF rotationPoint = new PointF(r.Left + (r.Width/2), r.Top + (r.Height/2));
rotationtransform.RotateAt(180, rotationPoint);
gp.Transform(rotationtransform);
//gp.CloseAllFigures(); //make sure the polygon is closed - does not work
foreach (PointF pt in gp.PathData.Points)
{
sb.AppendFormat("{0} {1},", pt.X, pt.Y);
}
PointF firstpoint = gp.PathData.Points[0];
sb.AppendFormat("{0} {1}", firstpoint.X, firstpoint.Y); //make last point same as first
sb.Append("))',0);");
sb.AppendLine("");
sb.AppendLine("SELECT @g");
System.Diagnostics.Debug.WriteLine(sb.ToString());
Je suppose qu'il serait assez facile d'afficher du texte dans Adobe Illustrator et de convertir le texte en chemin. C'est plus une question pour superuser.com, cependant. –
J'espérais le faire sans un logiciel coûteux, et construit autour d'un script réutilisable – geographika
à propos de votre 'A' semblant incorrect: Le problème est qu'il y a deux chemins. En plus de PathData, vous devrez regarder le tableau parallèle PathTypes http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.graphicspath.pathtypes.aspx. Quand le type d'un point est 0, vous devez fermer le dernier chiffre et en commencer un nouveau. –