Я хотел бы иметь возможность извлекать геометрию для каждой буквы в файле шрифта TrueType. Каждая буква будет иметь набор координат, предполагая, что каждая буква находится в собственной сетке.Извлечь геометрию из шрифта
Как картина говорит тысячу слов - я хотел бы получить вершины для письма, похожие на изображении ниже (любезно http://polymaps.org/)
Update
Благодаря намек на использование GDI, который теперь включен в .NET System.Drawing.Drawing2D. Я создал следующий код для создания многоугольников WKT. Возможны кривые Безье. И даже после того, как буквы были перевернуты и повернуты, некоторые пути по-прежнему не будут соединяться правильно.
// 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());
Я предполагаю, что было бы довольно легко поместить некоторый текст в Adobe Illustrator и преобразовать текст в путь. Это скорее вопрос для superuser.com. –
Я надеялся сделать это без дорогостоящего пакета программного обеспечения и построил вокруг многоразового скрипта – geographika
о вашем «A», который выглядит некорректно: проблема в том, что существует два пути. В дополнение к PathData вам необходимо посмотреть на параллельный массив PathTypes http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.graphicspath.pathtypes.aspx. Когда тип точки равен 0, вам нужно закрыть последнюю цифру и начать новую. –