我编写了一个小系统托盘应用程序,它使用NotifyIcon来显示进程的状态。我正在通过以下方式加载高质量的64 x 64 png格式icon:
Bitmap rawImage = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Snitch.Icons.Loading.png"));
m_icon.Icon = Icon.FromHandle(rawImage.GetHicon());
然而,系统托盘中显示的图标看起来不像我的源图标,是否有设置或我缺少的东西?我已经尝试过VS2008创建的16x16,32x32八位图标文件,但它们似乎没有更好。
答案 0 :(得分:2)
如果您添加NotifyIcon控件 然后,你的应用程序的Form对象 您的应用程序将显示一个图标 在任务栏的托盘区域中。该 渲染图标的渲染大小是 与控制箱和控制箱相同 任务栏图标:16x16像素, 可能会延伸到容纳 系统托盘的高度,即 取决于的高度 任务栏。但奇怪的是,Windows确实如此 不要使用16x16x256位图 环境;它使用32x32x256 默认情况下位图,并将其压扁 降至所需的大小。我能想到 没有特别好的理由 这种差异 - 使用32x32 通知图标的版本,但是16x16 任务栏和控制箱 - 但在那里 它是。
http://www.hhhh.org/cloister/csharp/icons/
注意 - 文章来自c。 2003
答案 1 :(得分:1)
考虑相对于全尺寸照片的缩略图图像的质量;现在想象将整张照片缩小到16x16像素。原始尺寸与新尺寸之间的差异越大,无论您是缩小还是拉伸,结果看起来都会越差。
如果可以,最好的办法是获取或创建一个实际包含单独的16x16,32x32,48x48和64x64图标的.ico文件。接下来最好的事情可能是在通知区域使用普通的16x16图标。任何调整大小/重新采样的图像都会看起来扭曲。
网上有很多网站可以免费或廉价地下载多个尺寸或16x16图标。 where to find icons上已经有几个问题,所以我不会尝试自己开始列出网站。
答案 2 :(得分:1)
我也在系统托盘中看到扭曲的图标,我已将问题追溯到Win DPI设置。在我的情况下,它是115而不是100.当在系统托盘中显示时,16x16图标实际显示为18x18。数字来自这个等式:
iconSize= (int) (16* (115/100))= int (18.4) = 18
18x18图标看起来很难看,因为Win采用16x16图标并“克隆”几个像素行和列以匹配新尺寸。我尝试使用自定义的18x18图标提供Win,但Win不会在系统托盘上显示它。它将首先强制将图标位图强制为最接近的2的幂(16x16),然后然后将其拉伸至18x18,以便通过像素克隆显示(具有预期的工件) )。除了改变你的DPI之外,我没有看到任何变通方法,因为我们无法控制强制的,中间的“2次幂”步骤。