gpt4 book ai didi

.net - 从字体中提取几何图形

转载 作者:行者123 更新时间:2023-12-04 04:19:26 27 4
gpt4 key购买 nike

我希望能够为 TrueType 字体文件中的每个字母提取几何图形。每个字母都有一组坐标,假设每个字母都在自己的网格中。

正如一张图片讲述了一千个单词 - 我想得到类似于下图的字母的顶点(由 http://polymaps.org/ 提供)

alt text

更新

多亏了使用 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());

alt text
alt text

最佳答案

对于 Windows,您可以使用 Gdiplus。创建一个 GraphicsPath并在其上调用 AddString()。

然后检查 PathData 或 PathPoints。

关于.net - 从字体中提取几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com