C# 通用GDI+;GraphicsPath.AddString()中存在异常,具有某些字体和字符

C# 通用GDI+;GraphicsPath.AddString()中存在异常,具有某些字体和字符,c#,fonts,gdi+,C#,Fonts,Gdi+,你知道为什么最近的一次Windows更新会导致GraphicsPath.AddString()和某些字体出现问题,但只针对特定字符吗?如何解决这个问题 示例字体是(它是公共域,所以您可以自己尝试)。如果使用Graphics.DrawString(),效果很好。如果您尝试使用GraphicsPath.AddString()来编写Lorem ipsum,它也可以正常工作,但是如果您尝试使用C字符(大写C)或5数字,它将失败 就在几周前,它工作得非常好,在最近的更新之后,它以臭名昭著、几乎不可调试的通

你知道为什么最近的一次Windows更新会导致
GraphicsPath.AddString()
和某些字体出现问题,但只针对特定字符吗?如何解决这个问题

示例字体是(它是公共域,所以您可以自己尝试)。如果使用
Graphics.DrawString()
,效果很好。如果您尝试使用
GraphicsPath.AddString()
来编写
Lorem ipsum
,它也可以正常工作,但是如果您尝试使用
C
字符(大写
C
)或
5
数字,它将失败

就在几周前,它工作得非常好,在最近的更新之后,它以臭名昭著、几乎不可调试的通用GDI+异常而惨遭失败

示例代码:

string textOK = "Lorem ipsum";
string broken = "C"; // Yes, only capital letter 'c'!

FontStyle style = FontStyle.Regular;

Bitmap b = new Bitmap(200, 200, PixelFormat.Format32bppPArgb)
using (Graphics g = Graphics.FromImage(b))
{
  g.Clear(Color.White);
  g.SmoothingMode = SmoothingMode.HighQuality;

  using (StringFormat sf = new StringFormat())
  {
    RectangleF rect = new RectangleF(0, 0, 200, 200);
    float size = 8;

    using (Font f = new System.Drawing.Font("Thin Pencil Handwriting", size, style))
    {
      // Works perfectly fine
      g.DrawString(textOK, f, Brushes.Black, rect, sf);
      g.DrawString(broken, f, Brushes.Black, rect, sf);
    }

    using (GraphicsPath path = new GraphicsPath())
    {
      FontFamily family = new FontFamily("Thin Pencil Handwriting");

      // This works fine
      path.AddString(textOK, family, (int)style, size, rect, sf);

      // This causes Generic GDI+ exception!
      path.AddString(broken, family, (int)style, size, rect, sf);

      g.FillPath(Brushes.Black, path);
    }
  }
}

我用的是C#,但我不认为它与C#有关。没有最新更新的旧机器工作正常,但我不能告诉人们不要安装系统更新:(我还发现了另外两种导致类似问题的字体,它们都是
GraphicsPath.AddString()
方法。

今天早上安装更新后,我遇到了同样的问题。我在Microsoft上找到了这篇最近的文章,似乎解决了这个问题,尽管这个问题似乎仍然悬而未决


不清楚你希望通过调试器实现什么,调试器不会告诉你字体有什么问题,也不会告诉你安全更新如何使字体不兼容。唯一真正的解决办法是停止使用调试器,直到某个神奇的日子,一位免费字体作者将修复他的字体。你一直在分发一种看起来不兼容的字体o利用一个安全漏洞应该也会给你一些停顿。顺便说一句,一定要让你的客户知道。我想做的是找出导致这个问题的原因,以及是否有任何解决办法。我链接的字体只是一个例子。因为我发布了这个问题,我得到了许多其他字体的报告,所以这个问题并不罕见。如果这是我的软件中分发的一两种字体,修复起来相当容易,因为有些字体有一些奇怪的问题。但事实并非如此。我知道我可以在使用字体之前添加额外的检查,并对用户说:嘿,这种字体以前工作过,但现在它是一种安全威胁,我们不能再使用它了。这是错误的st st Study。现在有一个可选的Windows更新修复了它,kb3065979:。您可以使用Windows Update安装它,因为它是可选的更新,所以必须显式选择它。