syn*_*cis 7 .net c# icons image notifyicon
我在Windows 7上使用Visual Studio 2010,C#.
我已将一个通知控件添加到我的项目中,并将其设置为我已导入项目的图标.如果我只是预览它,图标图像真的很好看,但是一旦我运行我的代码并在系统托盘中看到它,那它就非常糟糕,就像边是点缀而不是直线等等.我尝试过相同文件的16x16,24x24,32x32和48x48但我的结果却很糟糕.
我错过了什么吗?
myNotifyIcon.Icon = SysDir.Properties.Resources.icon2_32_ico_rgba;
Run Code Online (Sandbox Code Playgroud)
idm*_*adj 15
直接在资源中使用图标的问题是,框架只是将默认图标版本缩放到通知区域所需的大小,而不是在图标文件中选择正确的图标版本.这就是你看到锯齿状边缘的原因.
为了获得最佳质量,您需要自己在图标中选择合适的尺寸.
首先,不要直接NotifyIcon.Icon在资源中设置图标,而是创建一个新Icon实例.这样做可以让您在图标资源中选择特定的图标大小.使用SystemInformation.SmallIconSize将获得通知区域所需的大小.
所以:
myNotifyIcon.Icon = new Icon(Properties.Resources.MyIcon, SystemInformation.SmallIconSize);
Run Code Online (Sandbox Code Playgroud)
现在,SystemInformation.SmallIconSize始终返回正确的图标大小,但仅当您的应用程序支持DPI时(否则,它始终返回16).如果您的应用程序不支持DPI,并且它在启用了DPI扩展的系统上使用,则上面的行将选择资源中的16x16图标,它将扩展到通知区域所需的任何大小(换句话说,丑陋的图标).
通过使您的应用程序支持DPI,SystemInformation.SmallIconSize将返回正确的大小,同时考虑到DPI扩展.例如,如果DPI缩放为150%,SystemInformation.SmallIconSize则返回24(16×1.5).
要使您的应用程序支持DPI,只需将其添加到<asmv1:assembly>标记内的app.manifest :
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
Run Code Online (Sandbox Code Playgroud)
编辑:
我联系的信息似乎在这一点上是可疑的.尝试一下,但如果它不起作用,那么我建议您编辑您的问题以发布所有实验的屏幕截图(每个图标大小及其缩放方式).
原版的:
根据此链接,32x32x256的大小和颜色深度正确:
http://www.hhhh.org/cloister/csharp/icons/
但是在构建该图像时必须非常小心:
原因是Windows将通过简单地丢弃3/4像素将32x32图像"调整"为16x16.上面的链接通过几个屏幕截图演示了这种现象:
之前:

后:

我不确定在Windows 7上有多少颜色深度挑剔(仅256色?)/重采样问题仍然存在,但在XP上肯定是这样.
| 归档时间: |
|
| 查看次数: |
3370 次 |
| 最近记录: |