从字体中提取几何图形
我希望能够提取 TrueType 字体文件中每个字母的几何形状。每个字母都有一组坐标,假设每个字母都在自己的网格中。
正如一张图片讲述了一千个单词 - 我想获取类似于下图的字母的顶点(由 http:// /polymaps.org/)
更新
感谢使用提示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());
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于 Windows,您可以使用 Gdiplus。创建一个 GraphicsPath 并调用 AddString()它。
然后检查 PathData 或 PathPoints。
For Windows, you can use Gdiplus. Create a GraphicsPath and call AddString() on it.
Then examine the PathData or PathPoints.
我需要 MATLAB 中的输出,因此使用 MATLAB.NET 接口获取正确标记的答案。下面贴出源码
I needed the output in MATLAB so took the correctly marked answer using the MATLAB.NET interface. Source code posted below
在 Adobe Illustrator 中
这会将文本转换为由锚点和贝塞尔曲线组成的路径。
除了使用应用程序之外,我不知道如何以编程方式执行此操作。
In Adobe Illustrator
This will convert the text to paths made of anchors and Bezier curves.
Aside from using an application, I don't know how to do this programmatically.
Inkscape 是免费的,包含 文本到路径功能。一些 Inkscape 功能是命令驱动的,但我不知道这是否能准确解决您的问题。 Inkscape 的原生格式是 SVG。
Inkscape is free and includes text to path functionality. Some Inkscape functionality is command driven, but I don't know whether that will handle your problem exactly. Inkscape's native format is SVG.