我正在尝试创建一个非常简单的系统托盘图标,它只是一个带有白色边框的动态彩色圆圈。为此,我们使用 Webdings 字体。 Webdings 中的“n”只是一个简单的圆圈。

我目前正在做的几乎就在那里,但是在某些 PC 上(但不是全部),它最终会在其周围出现断断续续、丑陋的黑色边框:

c# - 从 Webdings 字体创建系统托盘图标-LMLPHP

这是我所拥有的:

protected static Icon GetTrayIconFromCache(Color statusColor)
{
    Bitmap bmp = new Bitmap(16,16);
    Graphics circleGraphic = Graphics.FromImage(bmp);
    circleGraphic.DrawString("n", new Font("Webdings", 12F, FontStyle.Regular), Brushes.White, -3f, -2f);
    circleGraphic.DrawString("n", new Font("Webdings", 9F, FontStyle.Regular), new SolidBrush(statusColor), 0f, -1f);
    Icon ico = Icon.FromHandle((bmp).GetHicon());
    return ico;
}

无论我怎么尝试,我都无法摆脱圆圈外面那些丑陋的黑点。他们不会为每个人显示......一些开发人员没有看到它,它看起来干净利落。我们还没有弄清楚那些看起来不错的 PC 和不那么好的 PC 之间的共性是什么。

但是......有没有更好的方法来做到这一点?

最佳答案

添加 TextRenderingHintAntiAliasGridFit

protected static Icon GetTrayIconFromCache(Color statusColor)
{
    Bitmap bmp = new Bitmap(16,16);
    Graphics circleGraphic = Graphics.FromImage(bmp);

    circleGraphic.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

    circleGraphic.DrawString("n", new Font("Webdings", 12F, FontStyle.Regular), Brushes.White, -3f, -2f);
    circleGraphic.DrawString("n", new Font("Webdings", 9F, FontStyle.Regular), new SolidBrush(statusColor), 0f, -1f);
    Icon ico = Icon.FromHandle((bmp).GetHicon());
    return ico;
}

关于c# - 从 Webdings 字体创建系统托盘图标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48060830/

10-13 03:15