2010-04-24 63 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

相关问题