为什么最近的一次Windows更新会导致GraphicsPath.AddString()
和某些字体出现问题,但仅针对特定字符?如何解决?
示例字体为Thin Pencil Handwriting(它是公共域,因此您可以自己尝试)。如果你使用Graphics.DrawString()
它可以正常工作。如果您尝试使用GraphicsPath.AddString()
来编写Lorem ipsum
,它也会正常工作,但如果您尝试使用C
字符(大写c
)或{{1数字。
几个星期前,它的表现非常好,在最近的更新之后,它与臭名昭着的几乎不可判断的通用GDI +异常惨遭失败。
示例代码:
5
我正在使用C#,但我不认为它特别与C#相关。没有最新更新的旧机器工作正常,但我不能告诉别人不安装系统更新:(我还发现了导致类似问题的其他两种字体 - 都使用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);
}
}
}
方法。
答案 0 :(得分:2)
我今天早上安装更新后遇到了同样的问题。我发现最近这篇关于微软的帖子似乎解决了这个问题,尽管问题似乎仍然很突出。