GraphicsPath.AddString()中的通用GDI +异常,包含某些字体和字符

时间:2015-05-20 10:15:53

标签: c# fonts gdi+

为什么最近的一次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); } } } 方法。

1 个答案:

答案 0 :(得分:2)

我今天早上安装更新后遇到了同样的问题。我发现最近这篇关于微软的帖子似乎解决了这个问题,尽管问题似乎仍然很突出。

https://connect.microsoft.com/VisualStudio/feedback/details/1331855/kb3045171-crash-gdi-with-system-drawing-drawing2d-addstring