一旦图像在系统托盘中结束,notifyicon图像看起来很糟糕

我在Windows 7上使用Visual Studio 2010,C#。

我已将一个通知控件添加到我的项目中,并将其设置为我已导入项目的图标。 如果我只是预览它,图标图像真的很好看,但是一旦我运行我的代码并在系统托盘中看到它,那么它真的很糟糕,就像边是点缀而不是直线等等。 我尝试了相同文件的16×16,24×24,32×32和48×48但我的结果很糟糕。

我错过了什么吗?

myNotifyIcon.Icon = SysDir.Properties.Resources.icon2_32_ico_rgba; 

编辑:

我联系的信息似乎在这一点上是可疑的。 尝试一下,但如果它不起作用,那么我建议您编辑您的问题以发布所有实验的屏幕截图(每个图标大小及其缩放方式)。

原版的:

根据此链接,32x32x256的大小和颜色深度正确:

http://www.hhhh.org/cloister/csharp/icons/

但是在构建该图像时必须非常小心:

  • 拍摄16x16x256图像,让它看起来不错
  • 将其加倍至32×32(如果在绘图程序中执行此操作,请注意不要模糊或重新取样)

原因是Windows只需丢掉3/4像素,就可以将32×32图像“调整”为16×16。 上面的链接通过几个屏幕截图演示了这种现象:

之前:

在缩小图标之前

后:

缩小图标后

我不确定在Windows 7上有多少颜色深度挑剔(仅256色?)/重采样问题仍然存在,但在XP上似乎确实如此。

直接在资源中使用图标的问题是,框架只是将默认图标版本缩放到通知区域所需的大小,而不是在图标文件中选择正确的图标版本。 这就是你看到锯齿状边缘的原因。

为了获得最佳质量,您需要自己在图标中选择合适的尺寸。

首先,不要直接将NotifyIcon.Icon设置为资源中的图标,而是创建一个新的Icon实例。 这样做可以让您在图标资源中选择特定的图标大小。 使用SystemInformation.SmallIconSize将获得通知区域所需的大小。

所以:

 myNotifyIcon.Icon = new Icon(Properties.Resources.MyIcon, SystemInformation.SmallIconSize); 

现在, SystemInformation.SmallIconSize总是返回正确的图标大小,但SystemInformation.SmallIconSize是您的应用程序支持DPI(否则,它总是返回16)。 如果您的应用程序不支持DPI,并且它在启用了DPI扩展的系统上使用,则上面的行将选择资源中的16×16图标,它将扩展到通知区域所需的任何大小(换句话说,丑陋的图标)。

通过使您的应用程序支持DPI, SystemInformation.SmallIconSize将返回正确的大小,同时考虑到DPI扩展。 例如,如果DPI缩放为150%,则SystemInformation.SmallIconSize将返回24(16×1.5)。

要使您的应用程序支持DPI,只需将其添加到标记内的app.manifest:

    true