2010-04-24 89 views
0

我的目標是顯示兩次相同的圖標,但每次顯示不同的大小。我試過以下內容:在c上以2種不同的尺寸顯示相同的圖標#

FileStream fs = new FileStream("name_of_the_icon_file.ico", FileMode.Open); 
Icon ico = new Icon(fs, 32, 32);  //create an in-memory instance of the icon, size 32x32 
Icon ico2 = new Icon(fs, 16, 16); //create an in-memory instance of the icon, size 16x16 
... 
Graphics.DrawIcon(ico, /*some point*/); 
Graphics.DrawIcon(ico2, /*some other point*/); 

最後一行拋出一個ArgumentException:值不在預期的範圍內。 有人可以解釋我最新的錯誤,怎麼做的權利?

回答

2

圖標文件包含一個或多個不同大小的圖像。

您正在使用的圖標構造函數會嘗試查找圖標文件中給出的大小的完全匹配。如果圖標文件不包含16x16圖像,則它將引發異常,因爲它無法匹配確切的大小。

相反,只需加載圖標(不指定大小,以便加載所有大小),然後使用Graphics.DrawIcon(圖標,矩形)覆蓋以您希望它伸展的大小繪製它。它將使用圖標中定義的最佳匹配大小進行渲染(然後根據需要對其進行縮放)。

爲了獲得最佳質量,請編輯您的圖標文件(我建議使用IcoFX)以您想要的尺寸(32x32和16x16)提供特定圖像,以便在繪製圖標時不會縮放圖標。

+0

謝謝你的答案,我試過你的建議,但代碼是在.NET 3.5 Compact Framework(對於Windows Mobile ...),並且這種DrawIcon的重寫方法不存在。只有DrawIcon(圖標圖標,int x,int y)。另一件事是,當我編譯沒有第二行(32x32圖標大小)的代碼時,它會繪製較小的圖標(16x16)(沒有例外...),所以我不認爲圖標不包含16x16圖像。 也許你在這些新假設下有另一種想法?再次感謝。 – 2010-04-24 16:32:21

+0

你的圖標是否有* 16x16和32x32尺寸? – 2010-04-24 16:46:12

+0

是的,我剛剛使用Visual Studio中提供的圖像編輯器進行了檢查。 – 2010-04-24 16:51:20

相關問題