有什么想法为什么最近的Windows更新之一会导致GraphicsPath.AddString()
和某些字体出现问题,但仅适用于特定字符?如何解决?
示例字体为Thin Pencil Handwriting(这是公共领域,因此您可以自己尝试)。如果将Graphics.DrawString()
与它一起使用,它将很好用。如果您尝试使用GraphicsPath.AddString()
来写Lorem ipsum
,它也可以正常工作,但是如果您尝试使用C
字符(大写c
)或5
数字,它将失败。
就在几周前,它运行良好,最近更新后,由于臭名昭著且几乎无法言喻的Generic 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的帖子似乎已解决了该问题,尽管该问题似乎仍然悬而未决。
https://connect.microsoft.com/VisualStudio/feedback/details/1331855/kb3045171-crash-gdi-with-system-drawing-drawing2d-addstring