首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#字体作为2D点

C#字体作为2D点
EN

Stack Overflow用户
提问于 2017-04-06 23:52:00
回答 2查看 1.1K关注 0票数 4

我正在用C#编程,我需要一种在2D中获得字体为点的方法。我基本上希望字体转换成一个网格,以便我可以渲染它的2D/3D。有什么办法吗?还是最好只是下载网格或其他东西,然后将它们加载到我的程序中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 01:32:31

winforms中,您可以使用GraphicsPathSystem.Drawing.Drawing2D

  • 要么访问Bezier曲线中的PathPointsPathTypes数据
  • 或者,在Flattening之后,访问PathPoints数组的路径,该数组现在由线段组成。

使用其中一个GraphicsPath.AddString方法创建路径..!

您可能还想查看GraphicsPathIterator类,它..

提供在GraphicsPath中遍历子路径并测试每个子路径中包含的形状类型的能力。

下面是绘制扁平段点的示例:

代码语言:javascript
运行
复制
Bitmap bmp = new Bitmap(400, 400);
GraphicsPath gp = new GraphicsPath();
using (Graphics g = Graphics.FromImage(bmp))
using (Font f = new Font("Tahoma", 40f))
{
    g.ScaleTransform(4,4);
    gp.AddString("Y?", f.FontFamily, 0, 40f, new Point(0, 0), StringFormat.GenericDefault);
    g.DrawPath(Pens.Gray, gp);
    gp.Flatten(new Matrix(), 0.2f);  // <<== *
    g.DrawPath(Pens.DarkSlateBlue, gp);
    for (int i = 0; i < gp.PathPoints.Length; i++)
    {
        PointF p = gp.PathPoints[i];
        g.FillEllipse(Brushes.DarkOrange, p.X-1, p.Y - 1, 2, 2);
    }
    pictureBox1.Image = bmp;
}

注意第二个Flatten参数,它允许您控制有多紧,即曲线被线逼近的距离。越小,越小,值越多, 2d点就越多。

要使用无人值守的路径,需要将PathPoints与各自的PathTypes组合起来;这与创建Bezier曲线基本相同:每个点之间有两个控制点。类型告诉您图形从哪里开始/结束,从哪里开始或从哪里开始。

票数 4
EN

Stack Overflow用户

发布于 2017-04-06 23:59:51

您可以使用GlyphTypeface.GetGlyphOutline方法返回组成字母曲线的字形。注意,这是WPF的一部分。

MSDN:

返回一个几何值,描述字体中单个字形的路径。

我怀疑它是在调用本机函数GetGlyphOutline

...which您可以从WinForms/XNA应用程序中进行p调用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43267557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档