2

我编写了一个小系统托盘应用程序,它使用NotifyIcon来显示进程的状态。我正在通过以下方式加载高质量的 64 x 64 png 格式的图标

Bitmap rawImage = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Snitch.Icons.Loading.png"));
m_icon.Icon = Icon.FromHandle(rawImage.GetHicon());  

但是出现在系统托盘中的图标看起来从来没有像我的源图标那样好,是否有设置或我缺少的东西?我已经尝试过 VS2008 创建的 16x16、32x32 八位图标文件,但它们似乎并不公平。

4

3 回答 3

2

如果您将 NotifyIcon 控件添加到应用程序的 Form 对象,那么您的应用程序将在任务栏的托盘区域中显示一个图标。通知图标的渲染大小与控制框和任务栏图标相同:16x16 像素,可能会拉伸以适应系统托盘的高度,这取决于任务栏的高度。然而奇怪的是,Windows 在这种情况下不使用 16x16x256 位图。它默认使用 32x32x256 位图,并将其压缩到所需的大小。对于这种差异,我想不出什么特别好的理由——通知图标使用 32x32 版本,而任务栏和控制框使用 16x16 版本——但确实如此。

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

注意 - 文章来自 c。2003年

于 2010-02-26T00:02:48.843 回答
1

考虑缩略图相对于全尺寸照片的质量;现在想象一下将整张照片缩小到 16x16 像素。原始尺寸和新尺寸之间的差异越大,结果看起来越差,无论您是在收缩还是拉伸。

如果可以的话,最好的办法是获取或创建一个实际包含单独的 16x16、32x32、48x48 和 64x64 图标的 .ico 文件。下一个最好的事情可能是在通知区域使用一个普通的 16x16 图标。任何图像大小调整/重新采样都会看起来失真。

网络上有许多网站可以免费或廉价下载多尺寸或 16x16 图标。这里已经有几个关于在哪里可以找到图标的问题,所以我不会尝试自己开始列出网站。

于 2010-02-26T00:05:00.680 回答
1

我在系统托盘中也看到扭曲的图标,并且我已将问题追溯到 Win DPI 设置。在我的例子中,它是 115 而不是 100。当显示在系统托盘中时,16x16 图标实际上显示为 18x18。这个数字来自这个等式:

iconSize= (int) (16* (115/100))= int (18.4) = 18

18x18 图标看起来很难看,因为 Win 采用 16x16 图标并“克隆”了一些像素行和列以匹配新大小。我尝试为 Win 提供自定义 18x18 图标,但 Win 不会按原样在系统托盘上显示它。它首先将图标位图强制为最接近的 2 次幂大小 (16x16),然后将其拉伸到 18x18 以通过像素克隆显示(带有预期的伪影)。除了更改您的 DPI 之外,我没有看到任何解决方法,因为我们无法控制强制的中间“2 次幂”步骤。

于 2011-04-20T06:04:53.903 回答