2010-02-25 100 views
2

我已經編寫了一個使用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

回答

1

考慮縮略圖圖像相對於全尺寸照片的質量;現在想象將整張照片縮小至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

2

如果添加一個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

1

我也在我的系統托盤中看到了扭曲的圖標,並且我已將問題追蹤到贏得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