c# - Graphics.DrawString - 组合变音符的绘制不正确

标签 c# winforms graphics gdi+

我正在尝试绘制文本,其中包含来自“组合变音符号”unicode 子范围 (U+0300 - U+FE23) 的符号。例如,我尝试绘制字符串“T̅”,其中包含两个字符:“T”和“\u0305”。

我知道了:

Incorrect GDI+ render

有什么办法可以得到正确的文本吗?

补充:我也需要绘制旋转文本。


PS:我的代码:

private void Form1_Paint(object sender, PaintEventArgs e) {
  Graphics g = e.Graphics;
  Font fontTahoma = new Font("Tahoma", 16);
  Font fontTimesNewRom = new Font("Times New Romulan", 16);
  Font fontArial = new Font("Arial", 16);
  Brush brush = new SolidBrush(Color.Red);
  g.DrawString("Test1 T̅ T\u0305", fontTahoma, brush, new PointF(20, 20));
  g.DrawString("Test1 T̅ T\u0305", fontTimesNewRom, brush, new PointF(20, 40));
  g.DrawString("Test1 T̅ N\u0305", fontArial, brush, new PointF(20, 60));
}

最佳答案

TextRenderer 似乎画得更好:

TextRenderer.DrawText(g, "Test1 T̅ T\u0305", fontTahoma, 
                                            new Point(120, 20), Color.Black);

enter image description here

关于c# - Graphics.DrawString - 组合变音符的绘制不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883405/

相关文章:

c# - 如何捕获 Windows 窗体组合框中的回车键

c# - 搜索 .NET(和 ASP.NET)的标签系统

c# - DependencyProperty 默认值和子类 DataGrid 中断属性

c# - 使用 CodeDom 以编程方式编译 C# Windows 窗体中的 C 代码?

javascript - HTML5 Canvas 重影动画问题?

C#:使用 Linq 和 Lambda 获取 2 个集合之间不匹配的元素

c# - ListBox 项目可以跨越多行吗? C#

c# - 有没有一种简单的方法来获取选中列表框中特定项目的坐标?

math - 平滑地连接两个贝塞尔曲线(C2连续)

opengl - glRotatef 无法正常工作