. net中嵌入图像的问题

本文关键字:问题 图像 net | 更新日期: 2023-09-27 18:17:34

我有一个Windows窗体,其中包括一个TreeView。treeview有其节点的图像,这些节点是项目中的嵌入式资源。当在我的开发机器上运行表单时(在Visual Studio内外),它运行良好,每个节点都有适当的图像。在生产设备上运行时,当窗口试图加载嵌入的图像时,会遇到一个错误。我已经添加了逻辑,不使用图像,如果发生这种情况,所以树仍然显示,但我想弄清楚问题是什么,以及如何解决它。

当尝试创建一个新的位图时,返回的错误消息是一个通用的"参数无效"。堆栈跟踪给出了"System.Drawing.Bitmap.."` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `请看下面的代码:

ImageList imageListNodes = new ImageList();
Bitmap mIcon;
mIcon = new Bitmap(this.GetType(), "m2.ico");   // This is the line that fails.
imageListNodes.Images.Add("m", (Image)mIcon);
tvRecords.ImageList = imageListNodes;   // This is the treeview used in the form.

文件m2.ico已直接添加到项目中。它的属性包括Build Action = Embedded Resource, Copy to Output Directory = not Copy .

我的开发计算机运行Windows 7,生产是Windows Server 2003 SP2,使用Citrix环境。这个项目是基于。net 3.5的,他们都有。net 3.5。这个表单可以在不同的客户端机器上使用,所以它应该能够在Server 2003及更高版本中工作。

谢谢你的建议!

编辑:

几分钟后,已经有人建议这个设置根本不起作用。我在上面注意到,这在我的计算机上既可以在Visual Studio调试模式下工作,也可以在单独调用时工作。图标文件本身在网络共享上是关闭的,因此DLL无法将它们拉进来;文件必须正确嵌入,位图/图标转换必须正常工作,否则在我的机器上根本无法工作。

我感谢你的建议,我愿意尝试其他方法来实现同样的目标,但请注意,我最初的问题至少是为什么这在我的电脑上有效,而在另一台电脑上却不行。谢谢!

. net中嵌入图像的问题

我不认为你可以加载一个。ico就像这样的图像。为什么不尝试先在icon对象中加载图标,然后调用icon。ToBitmap获取图像

尝试使用Icon类,而不是Bitmap。我不相信他们是兼容的。

编辑:刚想起一件事…Icon是一种多图像格式。它们是位图,但它可以包含不同分辨率的多个图像。但是,就像@PedroC88说的,调用ToBitmap它会转换。虽然我认为它使用的大小是系统决定的,你不能选择。