扭曲的系统托盘图标

扭曲的系统托盘图标

问题描述:

我已经编写了一个使用NotifyIcon显示进程状态的小系统托盘应用程序。扭曲的系统托盘图标

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

但是出现在系统托盘中的图标看起来绝对不会我的源图标一样好,是否有设置或东西我:我64 PNG以下列方式格式化icon加载高质量的64我错过了?我试过了VS2008创建的16x16,32x32八位图标文件,但它们看起来并不公平。

+0

我听说“系统托盘”的正确名称是“Windows通知区域”。尽管挑剔。 – zneak 2010-02-25 23:56:46

+0

您可能应该使用使用更好插值算法的图像编辑软件调整图标大小。或者甚至更好地直接使用特别设计的16x16图标。 – 2010-02-25 23:58:41

+0

我试过了16x16,他们似乎也奇怪地扭曲了。我应该提到这是Windows 7 Enterprise上的VS2008。 – Danielb 2010-02-26 00:00:02

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

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

网络上有许多网站可免费或低价下载多个尺寸或16x16图标。这里有几个关于where to find icons的问题,所以我不会尝试自己开始列出网站。

+0

我已经尝试过之前的小图标(虽然我画了它们),但他们似乎仍然会看到奇怪的文物,例如透明背景上的彩色圆圈以某种方式获得了部分黑色轮廓。 – Danielb 2010-02-26 00:11:47

+0

@Danielb:为此,我不得不看一个例子,我不能说我已经经历过这种特殊的行为。 – Aaronaught 2010-02-26 00:15:43

如果添加一个NotifyIcon控件来 应用程序的窗体对象,然后 您的应用程序将显示在任务栏托盘区的图标 。该通知图标的 渲染尺寸是 相同的控制箱及 任务栏图标:16×16像素, 潜在拉伸以容纳 系统托盘的高度,这 取决于 任务栏的高度。然而奇怪的是,Windows在 的情况下并没有使用16x16x256的位图 ;它默认使用32x32x256 位图,并将其压缩到所需的大小 。我可以认为 的 没有特别好的理由这个差异 - 使用32x32 版本作为通知图标,但是16x16 用于任务栏和控制箱 - 但有 它是。

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

注 - 文章是从C。 2003

+0

我正在使用我的任务栏上的小图标设置,所以我想这可能会引入额外的失真。 – Danielb 2010-02-26 00:10:22

我也在我的系统托盘中看到了扭曲的图标,并且我已将问题追踪到赢得DPI设置。在我的情况下,它是115而不是100.当在系统托盘中显示时,实际上显示一个16x16图标为18x18。数由该公式:

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

的18×18的图标看起来丑陋,因为赢需要一个16x16的图标和“克隆”了几个像素的行和列以匹配新的大小。我试过用自定义的18x18图标提供Win,但Win不会在系统托盘上显示它。它将首先强制图标位图到最接近2的尺寸(16x16),然后然后将它拉伸到18x18,以通过像素克隆(具有预期伪像)进行显示。除了更改DPI之外,我没有看到任何解决方法,因为我们无法控制强制的中间“2次幂”步骤。

+0

感谢您指出问题的实际来源。 – 2011-06-01 15:09:17