繁体   English   中英

Graphics.DrawString与TextRenderer.DrawText绘制朝鲜语字符

[英]Graphics.DrawString vs TextRenderer.DrawText drawing korean characters

我试图将我的Graphics.DrawString调用(.NET1)迁移到TextRenderer.DrawText (.NET 2.0中的新增功能),以获取ClearType呈现的优点。

问题是TextRenderer无法正确打印西方字符(韩文,日文等)。

这是显示问题的示例:

在此处输入图片说明

  • 您知道使用TextRenderer.DrawText时为什么看不到朝鲜字符吗?
  • 您知道如何解决此问题吗?

我使用以下两种方法绘制字符串:

    private void DrawGraphicsString(
        Graphics g, string text, Font font, Point p)
    {
        g.DrawString(
            text, font, text_brush, p.X, p.Y, mStringFormat);
        // mStringFormat is
        // StringFormat.GenericTypographic | 
        // StringFormatFlags.MeasureTrailingSpaces

    }

    private void DrawTextRendererString(
         Graphics g, string text, Font font, int x, int y)        
    {
        TextRenderer.DrawText(
            g, text, font, p, this.ForeColor, this.BackColor, mTextFormatFlags);

        // mTextFormatFlags are
        // StringFormat.GenericTypographic + StringFormatFlags.MeasureTrailingSpaces
        // mTextFormatFlags = 
        //    TextFormatFlags.NoPrefix |
        //    TextFormatFlags.NoPadding |
        //    TextFormatFlags.WordBreak |
        //    TextFormatFlags.TextBoxControl |
        //    TextFormatFlags.NoClipping |
        //    TextFormatFlags.ExpandTabs;
    }

编辑:使用其他字体可以正常工作(使用的字体Malgun Gothic)

在此处输入图片说明

所以现在我的问题是:

  • 为什么Graphics.Drawtext即使字体不支持韩式字符,也会绘制韩式字符?
  • 我将corean文本粘贴到Visual Studio编辑器中,该编辑器使用“ Consolas”字体,并且可以正确绘制。 那么,为什么Visual Studio编辑器可以显示朝鲜语字符,而文本框却不能呢?

事实是,当编辑者知道他们知道的Unicode范围中不支持的字符时,便会更改其默认Unicode字体的字体(在您的情况下,可能是Arial Unicode Sans MS或MS-Mincho需要CJK Unicode定义)。 同时,使用特定字体强制渲染不允许进行此字体切换。

这就是为什么在编译之前必须知道是否需要Unicode以及在这种情况下要使用哪种字体的原因。

因此,对于您的另一个问题,为什么DrawString成功地完成了DrawText不能执行的字体切换。 秘密在您设置的StringFormat.GenericTypographic标志中。 GenericTypographics默认包含将Language ID设置为中性语言,

这意味着将使用与调用线程关联的当前语言。 [1]

由于您使用的是CJK输入字符串,因此您的调用线程可能知道将语言设置为CJK语言集,然后通过使用通用的Unicode字体开关来确保显示正确的符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM