扭曲的系统托盘图标

时间:2010-02-25 23:53:15

标签: .net icons system-tray

我编写了一个小系统托盘应用程序,它使用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八位图标文件,但它们似乎没有更好。

3 个答案:

答案 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次幂”步骤。