gpt4 book ai didi

c# - 透明 .NET 窗体中的抗锯齿文本

转载 作者:太空狗 更新时间:2023-10-29 17:59:50 27 4
gpt4 key购买 nike

我有一个 C# 应用程序,它在透明的 .NET 表单。窗体没有控件,也没有边框。其属性 TransparencyKey 设置为窗体的背景颜色“浅灰色”使其透明。
所以用户只能看到文本(当前时间)。

文本在 PaintEventHandler 中绘制:

private void Display_Paint( object sender, PaintEventArgs e )
{
Graphics formGraphics = e.Graphics;

Font myFont = new Font( "Microsoft Sans Serif", 24, FontStyle.Bold );

formGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
//formGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;

formGraphics.DrawString( "00:00:00", myFont, Brushes.Green, 0.0F, 0.0F );

myFont.Dispose();
}

由于抗锯齿,文本“00:00:00”在表格位于深色背景上。对于浅色背景,文本没问题。

这张图片显示了问题和好的案例:

text shows fringes due to anti-aliasing for dark background
(来源:habermann-net.de)

显然 Windows 确实以适合的方式呈现文本表单自己的背景颜色,而不是它适合的方式透明窗体后面的背景。

有没有可能让Windows把背景带在后面呈现文本时考虑表单,以便我得到摆脱边缘?

一个“解决方案”可能是通过设置 TextRenderingHint 来关闭抗锯齿因此。但到目前为止,这不是我首选的“解决方案”。

系统:
Windows XP、SP 3、.NET 3.5、VS 2008

最佳答案

我问了一个similar question几个月前。

我最终做的是有两个选择:

  1. 通过将应用程序的不透明度暂时设置为 0 来复制应用程序背后的背景,然后在其上绘制抗锯齿文本。如果窗口及其下方的窗口不经常移动,则此方法效果很好。
  2. 使用 layered window .比 TransparencyKey 效果更好,但仍然最适合非抗锯齿文本。 (只要避免使用 ClearType 字体就可以了)

关于c# - 透明 .NET 窗体中的抗锯齿文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com