【问题标题】:Tahoma font rendering on Windows 8Windows 8 上的 Tahoma 字体渲染
【发布时间】:2023-03-03 19:41:01
【问题描述】:

有没有办法像以前的 Windows 版本一样在 Windows 8 上呈现 Tahoma 字体文本?我们在 WinForms 应用程序中使用 GDI Graphics.DrawString() 来绘制它,但结果看起来大不相同。字符间距很差。

谢谢。

【问题讨论】:

    标签: c# fonts windows-8 gdi


    【解决方案1】:

    是的,您应该始终支持 TextRenderer 类。它修复了 Graphics.DrawString() 在低 DPI 设备(如显示器)上的严重损坏行为。 TextRenderer.DrawText() 使用 GDI 的 DrawTextEx() winapi 函数,与许多本地 Windows 程序用于渲染文本的函数相同。

    以下示例表单很好地证明了两者之间的区别:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        protected override void OnPaint(PaintEventArgs e) {
            var s = "Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
            e.Graphics.DrawString(s, this.Font, Brushes.Black, 0, 0);
            TextRenderer.DrawText(e.Graphics, s, this.Font, new Point(0, this.Font.Height), Color.Black);
            base.OnPaint(e);
        }
    }
    

    在如下所示的 96 dpi 显示器上:

    【讨论】:

    • 文本渲染器不支持透明度(在透明位图上绘制黑色文本),您知道任何解决方法吗?
    • 确实如此。单击按钮以正确记录您的新问题。
    • 问题在于,如果你在透明背景位图上绘制一个白色字符串,那么抗锯齿会以黑色完成,而不是调制 Alpha 通道...
    • 是的,Color.Transparent 是黑色的,alpha 为 0。Windows 上没有“调制”alpha 的文本渲染引擎。无论如何都是毫无意义的,因为背景颜色是完全不可预测的,它永远无法正确地对文本进行抗锯齿处理。您必须关闭抗锯齿功能。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多