gpt4 book ai didi

c# - 作为单行矢量路径的文本轮廓

转载 作者:太空狗 更新时间:2023-10-29 20:28:05 27 4
gpt4 key购买 nike

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

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

Text outline Single line glyph path

请参阅此示例。使用内置函数将始终为您提供包含其内部和外部边界线的字母路径。只有第一个是由单笔画组成的,这导致了更短的路径。

enter image description here

最佳答案

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

幸运的是,有些字体可以通过将轮廓笔划闭合来模拟单笔划行为。大多数情况下,它们由 CNC 绘图软件使用。这是一个link到包含@Simon Mourier 建议使用的相同字体的 zip 文件。

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

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

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

enter image description here

    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/

关于c# - 作为单行矢量路径的文本轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13797787/

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