【问题标题】:Outline of a text as single line vector path作为单行矢量路径的文本轮廓
【发布时间】:2012-12-10 09:02:21
【问题描述】:

对于应用程序,我需要将文本/字形绘制为基于矢量的路径。使用 GDI+ GraphicsPath 和 Graphics.DrawPath 或 WPF FormattedText 和 Geometry 工作正常,我得到的输出如第一张图片所示。但是,是否有可能以某种方式将字母作为单行路径,如第二张图片所示(显示 L)。

如果有人有想法,我很高兴。

请参阅此示例。使用内置函数将始终为您提供包含其内部和外部边界的字母的路径。只有第一个是由单笔划组成的,因此路径要短得多。

【问题讨论】:

  • 对于一个简单的项目,我会采用 1 像素宽度的 2D 坐标并使用 A* 算法来找到对象周围的“路径”。
  • 另请参阅here,但这适用于 Adob​​e 和 CAD 应用程序。到目前为止,我发现的唯一解决方案是必须在系统上安装的单行 TrueType 字体。
  • 你能说得更具体点吗?你说一个“单一的路径”然后显示一个包含两行的图像。目前尚不清楚您要完成什么。
  • 我编辑了我的帖子。有关详细信息,请参阅新图片。我的目标是获得绘制像 A 这样的字母的最短路径。
  • 我仍然不清楚你在问什么。您是在寻找字形的笔画(就像有人用钢笔画的笔画)而不是构成其轮廓的路径吗?

标签: c# text gdi+ glyph


【解决方案1】:

单笔画字体由字体的填充区域定义。 TTF(轮廓)字体通过围绕填充区域的笔划定义每个字符。因此,它们必然形成一个封闭的形状。换句话说,不可能有一个“真正的单笔”轮廓字体,因为单笔字体只有一个填充区域。 .NET Framework 仅支持 TTF 字体。

幸运的是,有些字体通过封闭轮廓笔画来模拟单笔画行为。大多数情况下,它们被 CNC 绘图软件使用。这是压缩文件的link,其中包含@Simon Mourier 建议使用的相同字体。

我尝试了第一个,实际上我看不到封闭区域的单独路径。我确实编写了一些代码,使常规字体的笔画靠近自己,但弯曲区域在某些地方消失了。无论 .NET 使用什么内部算法来尝试从压扁的轮廓创建 1px 路径,都无法像使用设计良好的字体那样工作。所以,这和使用 .NET 一样好。

您可以使用此代码查看安装后每种字体产生的效果。或者,我想您可以在您的软件中尝试它们 :) 无论哪种方式,我希望这对您有用。

这是Graphics.DrawPath 的输出,而不是Graphics.FillPath

    private void button1_Click(object sender, EventArgs e) {
        DrawText("single stroke ttf engraving fonts");
    }

    private void DrawText(string text) {
        using (Graphics g = panel.CreateGraphics())
        using (Font font = new System.Drawing.Font("1CamBam_Stick_1", 50, FontStyle.Regular))
        using (GraphicsPath gp = new GraphicsPath())
        using (StringFormat sf = new StringFormat()) {
            sf.Alignment = StringAlignment.Center;
            sf.LineAlignment = StringAlignment.Center;

            gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, panel.ClientRectangle, sf);
            g.Clear(Color.Black);
            g.DrawPath(Pens.Red, gp);
        }
    }

另外,如果您打算做很多这样的事情,这里有一篇非常相关的文章。 http://tipsandtricks.rolanddga.com/software/how-to-generate-single-line-fonts-for-use-with-dr-engrave/

【讨论】:

    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2016-05-27
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    相关资源
    最近更新 更多