2015-05-20 2 views
2

Любые идеи, почему одно из последних обновлений Windows вызывает проблемы с GraphicsPath.AddString() и некоторыми шрифтами, но только для определенных символов? Как это исправить?Общее исключение GDI + в GraphicsPath.AddString() с определенными шрифтами и символами

Пример шрифта Thin Pencil Handwriting (это общественное достояние, поэтому вы можете попробовать сами). Он отлично работает, если вы используете Graphics.DrawString(). Он также отлично работает, если вы попытаетесь использовать GraphicsPath.AddString() с ним, чтобы написать Lorem ipsum, но не получится, если попытаетесь использовать символ C (столица c) или 5 цифр.

Он работал отлично, всего несколько недель назад, и после недавних обновлений он терпит неудачу с печально известным и практически undebuggable 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().

+0

неясно, что вы надеетесь достичь с помощью отладчика, он ISN» я расскажу вам, что не так с шрифтом или как обновление безопасности сделало шрифт несовместимым. Только реальное решение, которое у вас есть, - это прекратить использовать его до некоторого волшебного дня, reeware автор шрифта собирается исправить свой шрифт. То, что вы распространяли шрифт, который * появляется * для использования дыры в безопасности, также должно дать вам некоторую паузу, а также, не забудьте сообщить своим клиентам. –

+0

Что я хочу достичь, так это выяснить, что вызывает эту проблему, и если есть какие-либо обходные пути. Шрифт, который я связал, является лишь примером. Поскольку я разместил этот вопрос, у меня появились отчеты по многим другим шрифтам, поэтому проблема не редкость. Если бы это был один или два шрифта, распространяемых вместе с моим программным обеспечением, это было бы довольно легко исправить, поскольку шлейфы некоторых шрифтов имеют какие-то странные проблемы. Но это не так. Я знаю, что всегда могу добавить дополнительную проверку перед использованием шрифта и сказать пользователю: эй этот шрифт работал раньше, но теперь это угроза безопасности, и мы больше не можем его использовать. Это просто глупо. – SiliconMind

ответ

2

Я столкнулся с тем же вопросом после установки обновления утром. Я нашел этот недавний пост на Microsoft, которая кажется для ее решения, хотя этот вопрос, кажется, все еще невыясненными.

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

+0

Теперь доступно дополнительное обновление для Windows, которое исправляет его, kb3065979: https://support.microsoft.com/en-us/kb/3065979. Вы можете установить его с помощью Центра обновления Windows, он должен быть выбран явно, поскольку это необязательное обновление. – Wout

Смежные вопросы