WPF Glyph 运行错误地渲染度符号

Mei*_*hes 3 .net c# directx wpf

我正在做一些自定义控件,并且我有一些通过 Glyph Runs 绘制的文本

\n\n

我的问题是 \xc2\xb0C 没有被我的字形正确渲染(无论字体系列如何),看起来像这样:

\n\n

问题符号

\n\n

所以我的字形运行代码(简化)是:

\n\n
var typeface = new Typeface(this.FontFamily, this.FontStyle, this.FontWeight, this.FontStretch);\n\n...\n\nGlyphRun glyphRun = CreateGlyphRun(typeface, "\xc2\xb0C", 10, new Point(0,0));\ndc.DrawGlyphRun(brush, glyphRun);\n
Run Code Online (Sandbox Code Playgroud)\n\n

在哪里

\n\n
internal static GlyphRun CreateGlyphRun(Typeface typeface, string text, double size, Point origin)\n{\n    if (text.Length == 0)\n        return null;\n\n    GlyphTypeface glyphTypeface;\n\n    typeface.TryGetGlyphTypeface(out glyphTypeface)\n\n    var glyphIndexes = new ushort[text.Length];\n    var advanceWidths = new double[text.Length];\n\n    for (int n = 0; n < text.Length; n++)\n    {\n        var glyphIndex = (ushort)(text[n] - 29);\n        glyphIndexes[n] = glyphIndex;\n        advanceWidths[n] = glyphTypeface.AdvanceWidths[glyphIndex] * size;\n    }\n\n    var glyphRun = new GlyphRun(glyphTypeface, 0, false, size, glyphIndexes, origin, advanceWidths, null, null,\n                                null,\n                                null, null, null);\n    return glyphRun;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为这是某种本地化问题。任何帮助,将不胜感激。

\n

Cle*_*ens 5

尝试更换

var glyphIndex = (ushort)(text[n] - 29);
Run Code Online (Sandbox Code Playgroud)

var glyphIndex = glyphTypeface.CharacterToGlyphMap[text[n]];
Run Code Online (Sandbox Code Playgroud)